1

hidraw0 が USB マウスだったので、ターミナルで cat /dev/hidraw0 と入力してデバイス ファイル /dev/hidraw0 を読み取りました。出力は一連の文字でした。このシーケンスは、マウスを動かし、クリックし、スクロールしたときに生成されました。

次に、Cプログラムでもこれを試しました。コードは、

include<stdio.h>

    int main()
    {
            FILE *ptr_file;
            char buf[1000];

            ptr_file =fopen("/dev/hidraw0","r");
            if (!ptr_file)
                return 1;

            char c;
            while (1)
            {
                c=fgetc(ptr_file);
                if(c != NULL)
                    printf("%c",c);
                else
                    printf(""); 
            }           

        fclose(ptr_file);
            return 0;
    }

これにより、同じ(おそらく)一連の文字が生成されました。しかし、非常に非同期的な方法で。cat /dev/hidraw0 コマンドほど速くは更新されませんでした。

なぜこれが起こるのですか?

4

2 に答える 2

1

ptr_fileを使用して呼び出しsetvbuf()て、バッファリングを無効にしてみてください_IONBF

于 2013-01-26T16:53:56.233 に答える
0

printf の後に stdout をフラッシュすると役に立ちますfflush(stdout);か?

于 2013-01-26T17:58:58.497 に答える