#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int fds[2];
char buf[7];
int i, rc, maxfd;
fd_set inset1, inset2;
struct timeval tv;
if((fds[0]=open("hello1", O_RDWR|O_CREAT, 0666))<0)
perror("open hello1 err");
if((fds[1]=open("hello2", O_RDWR|O_CREAT, 0666))<0)
perror("open hello2 err");
if((rc=write(fds[0], "Hello!\n", 7)))
printf("rc=%d\n", rc);
lseek(fds[0], 0, SEEK_SET);
maxfd = fds[0]>fds[1]?fds[0]:fds[1];
FD_ZERO(&inset1);
FD_SET(fds[0], &inset1);
FD_ZERO(&inset2);
FD_SET(fds[1], &inset2);
tv.tv_sec=2;
tv.tv_usec=0;
int j;
while(FD_ISSET(fds[0], &inset1)||FD_ISSET(fds[1], &inset2))
{
if(select(maxfd+1, &inset1, &inset2, NULL, &tv)<0)
perror("select");
else{
if(FD_ISSET(fds[0], &inset1)){
rc = read(fds[0], buf, 7);
// printf("rc %d\n", rc);
if(rc>0){
buf[rc]='\0';
// for(j=0; j<7; j++)
// {
// printf("buf [%d] = %c\n", j, buf[j]);
// }
printf("=====>> rc=%d, read: %s\n", rc, buf);
}
else
perror("read err");
}
if(FD_ISSET(fds[1], &inset2)){
rc = write(fds[1], buf, 7);
if(rc>0){
buf[rc] = '\0';
printf("rc=%d, write: %s\n", rc, buf);
}
else
perror("write err");
usleep(1000000);
}
}
}
return 0;
}
文件I/O 互斥操作 select
文件I/O与select示例
最新推荐文章于 2025-07-16 16:54:45 发布
本文通过一个C语言程序示例介绍了如何使用文件I/O操作进行读写,并利用select函数监控多个文件描述符的可读状态。程序创建了两个文件,向其中一个文件写入文本并读取内容到缓冲区,然后将缓冲区内容写入另一个文件。
670

被折叠的 条评论
为什么被折叠?



