標準入力stdinをread()する際、以下のソースだと、入力があるまでずっと read()の部分で止まってしまいます。
read()は、何も入力していないときは戻り値=0、と期待していましたがどうやら違うようです。
もちろんread()部分をマルチスレッドにすれば可能かとは思いますが、もしマルチスレッドを作る以外の方法で、stdinの中身が0か否かを即時に判定して、値を返すような手段があるのであれば、ご教授いただければと思います。
(Linuxの仕組み上、本当に手段がなさそうであれば、腹をくくってマルチスレッドを検討するつもりではいます。)
c
1 2int main(){ 3 char buf[255]; 4 int size; 5 6 memset(buf, '\0', sizeof(buf)); 7 8 while(1){ 9 size = read(STDIN_FILENO, buf, 255); 10 if (size == -1) { 11 perror("error"); 12 return 1; 13 } 14 else if (size == 0){ // 入力がまだなければ、先に進む。としたいがそうはなってくれない。 15 continue; 16 } 17 // 処理1:入力がない間、実行したい処理 18 printf("Hello\n"); 19 sleep(1); 20 // 処理2:入力がない間、実行したい処理 21 printf("World\n"); 22 sleep(1); 23 // 処理3 : 標準入力から受け取った、bufが"hoge\n"だったらwhileを抜ける 24 if(strcmp(buf, "hoge\n")==0){ 25 break; 26 } 27 } 28 return 0; 29}