| 发表于:2007-09-20 08:56:013楼 得分:0 |
我就是在read前先select的呀,程序如下: if((fd = open("/mnt/nfs/movie/corvette.mpg", o_rdonly ¦ o_nonblock)) < 0) { printf("can't open the file!\n"); return 0; } while(1) { fd_zero(&rfds); fd_set(fd, &rfds); tv.tv_sec = 5; tv.tv_usec = 0; select(fd+1, &rfds, null, null, &tv); if(fd_isset(fd, &rfds)) { len = read(fd, buf, 1); if(len > 0) { printf("buf = 0x%x\n", buf[0]); } else if(len == 0) { //to end of file lseek(fd, 0, seek_set); //move to file head } else { printf("failed to read ...\n"); break; } } else { printf("no data within 5 seconds!\n"); break; } } 当我把网线拔掉,程序就停留在read那里了,select也无法判断到超时;重新插上网线,程序又能继续接着执行。。。 | | |
|