QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 2877|回复: 1

刚开始学linux编程,有问题求助,非常感谢!!!!

[复制链接]
发表于 2010-4-17 21:24:33 | 显示全部楼层 |阅读模式
/*select.c*/
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/time.h>

int main(void)
{
        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");
        if((fds[1] = open ("hello2", O_RDWR|O_CREAT,0666))<0)
                perror("open hello2");
        if((rc = write(fds[0],"Hello!n",7)))
                printf("rc=%dn",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;
        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);
                                if(rc>0)
                                {
                                        buf[rc]='';
                                        printf("read: %sn",buf);
                                }else
                                        perror("read");
                        }
                        if(FD_ISSET(fds[1],&inset2))
                        {
                                rc = write(fds[1],buf,7);
                                if(rc>0)
                                {
                                        buf[rc]='';
                                        printf("rc=%d,write: %sn",rc,buf);
                                }else
                                        perror("write");
                        sleep(10);
                        }
                }
        }
        exit(0);
}
视频里历程,为啥视频里编出来是每隔10秒从文件1里读出一行写入文件2.我在Fedora里编完是只读一次然后每隔10s一直写入文件2同一个字符串。难道read函数是阻塞型的?读完一次就一直阻塞?
发表于 2010-11-4 21:31:15 | 显示全部楼层
hehe,新学?
同好
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-21 20:57 , Processed in 0.080959 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表