linux環境Cプログラミングとwindowsの違い

1605 ワード

1.system(「pause」)は使用できません.mypause()関数を自分で書くことができます.
#include 
#include 
void mypause()
{
    char ch;
    printf("Press Enter to continue...
"); __fpurge(stdin); while((ch = getchar())!='
' && ch != EOF) ; }

2.システム(「cls」)をシステム(「clear」)に変更
3.getchで文字を表示しない関数は使用できません.自分で関数を書いて端末パラメータを設定して実現するしかありません.
#include 
#include 
#include 
#include 
#include 
char getch(int len_max)
{
    char ch;
    struct termios old_attr, new_attr;
    int len = 0;
    int res = 0;
    if(len < len_max)
    {
        res = tcgetattr(STDIN_FILENO, &old_attr);
        assert(res == 0);
        memcpy(&new_attr, &old_attr, sizeof(old_attr));
        new_attr.c_lflag &= ~(ICANON | ECHO | ECHOE | ECHOK | ECHONL | ECHOPRT | ECHOKE);
        res = tcsetattr(STDIN_FILENO, TCSANOW, &new_attr);
        ch = getchar();
        ++len;
        res = tcsetattr(STDIN_FILENO, TCSANOW, &old_attr);
        assert(res == 0);
        return ch;
    }
    else
    {
        printf("Your in put must less than %d", len_max);
        return -1;
    }
}

4.getchar()リターンキーは「10」と認識され、値は10である.チェックアウトキーBackspaceはdeleteと認識され、値は127
5.Windowsの下のディレクトリパスは反スラッシュ、linuxの下は正スラッシュ/
6.windows下中国語はGBKコード、linux下はutf-8
7.windowsの下のテキストファイルの行末はrで、linuxの下でただ
8.fflushはstdinをクリアするために使用できません.fpurge(stdin)、setbuf(stdin,NULL)ではありませんこれはバッファを閉じます