2008.11.30<br />原程序:<br />#include <fcntl.h><br />#include <stdio.h><br />#include <unistd.h><br />#include <stdlib.h><br />#include <time.h><br />int main()<br />{<br /> int fds[2];<br /> char buf[100];<br /> int i,rc,maxfd;<br /> fd_set inset1,inset2;<br /> struct timeval tv;<br /> if((fds[0] = open("hello1",O_RDWR | O_CREAT,0666))<0)<br /> perror("open hello1");<br /> if((fds[1] = open("hello2",O_RDWR | O_CREAT,0666))<0)<br /> perror("open hello2");<br /> if((rc=write(fds[0],"hello!\n",7)))<br /> printf("rc=%d\n",rc);<br /> lseek(fds[0],0,SEEK_SET);<br /> maxfd = fds[0]>fds[1] ? fds[0] : fds[1];<br /> FD_ZERO(&inset1);<br /> FD_SET(fds[0],&inset1);<br /> FD_ZERO(&inset2);<br /> FD_SET(fds[1],&inset2);<br /> tv.tv_sec=2;<br /> tv.tv_usec=0;<br /> while(FD_ISSET(fds[0],&inset1) || FD_ISSET(fds[1],&inset2))<br /> {<br /> if(select(maxfd+1,&inset1,&inset2,NULL,&tv)<0)<br /> perror("select");<br /> else<br /> {<br /> if(FD_ISSET(fds[0],&inset1))<br /> {<br /> rc= read(fds[0],buf,7);<br /> if(rc>0)<br /> {<br /> buf[rc]='\0';<br /> printf("read: %s\n",buf);<br /> }<br /> else <br /> perror("read");<br /> }<br /> if(FD_ISSET(fds[1],&inset2))<br /> {<br /> rc=write(fds[1],buf,7);<br /> if(rc>0)<br /> {<br /> buf[rc]='\0';<br /> printf("rc=%d,write:%s\n",rc,buf);<br /> }<br /> else<br /> perror("write");<br /> sleep(10);<br /> }<br /> }<br /><br /> }<br /> exit(0);<br />}<br /><br />运行结果:<br /><br />[root@localhost exp]# ./select<br />rc=7<br />read: hello!<br /><br />rc=7,write:hello!<br /><br />read: Success<br />rc=7,write:hello!<br /><br />read: Illegal seek<br />rc=7,write:hello!<br /><br />read: Illegal seek<br />rc=7,write:hello!<br /><br />read: Illegal seek<br />rc=7,write:hello!<br />原程序意图:将文件hello1里的内容读出,并将此内容每隔10秒写到hello2里面<br /><br /><br />问题:1):为什么会出现read: Success??<br /> 2):为什么会出现read: Illegal seek??? |
|