私はこれを持っています:
//...
if ((tty = open("/dev/tty",O_RDONLY | O_NDELAY) ) == -1 )
{
perror("/dev/tty");
return 1;
}
//...
if (-1 == (fi = open(argv[1], O_RDONLY)) )
{
perror(argv[1]);
return 1;
}
//...
while (1)
{
printf("you have five seconds to enter a line number %d", line);
sleep(5);
i = read(tty, buf, 257);
printf("read %d\n", i);
if ( i == -1) {
perror("dev/tty/");
// if nothing was entered read always returns -1
//and perror prints: Resource temporarily unavailable. it's STRANGE!!!
}
if ( i == 0 )
{
lseek(fi, 0, SEEK_SET);
while((i = read(fi, buf, BUFSIZ)) > 0)
write(1, buf, i);
return 0;
}
//...
if ( 0 == read(fi, buf, lines_length[line]))
{
fprintf(stderr,"can't read\n");
return 1;
}
write(1, buf, lines_length[line]);
}
//...
したがって、O_NDELAYフラグを指定して/ dev / ttyを開きますが、後で読み取ると-1が返される(0を返す必要がある)ため、何か問題があるようです。何が悪いのかわかりません。そしてもう1つの質問:printf( "5秒あります")がwrite(1、buf、lines_length [line]);の後に出力するのはなぜですか。