`
axengine
  • 浏览: 145653 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

文件I/O 互斥操作 select

阅读更多
#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实现socket通信,完成Linux下的多客户聊天室!

    `select`是多路复用I/O模型的一种,它允许程序同时监控多个文件描述符(如socket),等待它们准备好进行读写操作。这种方式极大地提高了服务器处理并发连接的能力,尤其适用于处理大量短连接的情况。 首先,我们...

    Linux设备驱动程序学习(5)-高级字符驱动程序操作[(2)阻塞型I-O和休眠] - Linux设备驱动程序

    本篇将深入探讨Linux设备驱动程序中的高级字符驱动程序操作,特别是阻塞型I/O和休眠机制,这对于理解和编写高效、可靠的驱动至关重要。 首先,让我们了解什么是字符驱动程序。字符驱动程序主要处理那些产生或接收...

    基于select IO模型的远程目录浏览与多线程文件下载

    本文将深入探讨“基于select IO模型的远程目录浏览与多线程文件下载”这一主题,这涉及到操作系统内核、网络编程、多线程以及文件I/O等多个核心知识点。 首先,我们要理解什么是select IO模型。在Unix/Linux系统中...

    i.MX6ULL实现非阻塞IO访问【Linux驱动】.zip

    非阻塞I/O(Non-blocking I/O)是一种优化I/O操作的方法,特别适用于处理大量并发连接的情况,如网络服务器或实时数据处理。 在i.MX6ULL上实现非阻塞I/O访问,主要涉及到以下几个核心概念和技术: 1. **中断驱动**...

    linux编程 操作系统 文件操作 底层编程 学习资料

    3. 非阻塞I/O和异步I/O:`select()`, `poll()`, `epoll` 提供了一种监控多个I/O事件的方法,避免了不必要的等待。 4. 信号驱动I/O(SIGIO):利用信号来通知进程I/O事件的发生。 六、信号处理 1. 信号发送:`raise...

    UNIX环境高级编程

    书中会详细讲解如何使用系统调用如read、write、open、close等进行基本的文件I/O操作,以及如何利用select、poll和epoll等机制实现高效的I/O多路复用。 文件系统是UNIX系统的重要组成部分,它负责组织和管理磁盘上...

    Linux IO 之 IO与网络模型.pdf

    多路复用I/O模型(如select和epoll)允许多个连接复用同一个监听,适合于高并发场景。信号驱动I/O模型(SignalIO)允许进程在数据准备好后,通过信号机制进行通知。异步I/O模型则是让进程发起I/O操作后继续执行其他...

    VxWorks驱动程序.ppt

    对于复杂的I/O操作,例如需要同时处理多个设备数据的情况,VxWorks提供了select机制,允许任务等待多个设备输入或者设定I/O操作的超时时间,这是通过selectLib库实现的。 编写驱动程序时,通常需要初始化函数...

    武汉理工大学计算机考研试题

    同时,网络相关的I/O模型,如阻塞I/O、非阻塞I/O、多路复用I/O(如select、poll、epoll)和异步I/O,也可能出现在试题中。 最后,操作系统安全性和可靠性也是考察的热点。这可能包括访问控制、审计、防火墙、病毒...

    Unix环境高级编程

    非阻塞I/O、异步I/O和选择(select/poll/epoll)机制则用于提高高并发环境下的效率。套接字(socket)编程是网络I/O的一部分,支持进程间的网络通信。 在深入学习《Unix环境高级编程》的过程中,你将掌握Unix系统的...

    Linux_UNIX系统编程手册(下)

    4. **I/O操作**:Linux和UNIX提供了多种I/O模型,如阻塞I/O、非阻塞I/O、I/O复用(select、poll、epoll)、信号驱动I/O和异步I/O。手册会深入解析这些模型的原理和应用,帮助开发者选择合适的I/O策略。 5. **网络...

    UNIX环境高级编程881

    **一、文件I/O** 文件I/O是任何程序与外部世界交互的基础。在UNIX中,文件被抽象为文件描述符,它是一个非负整数,用于标识打开的文件。每个进程都有一个文件描述符表,其中包含了文件描述符和它们对应的文件状态。...

    linux高性能服务器

    1. select/poll/epoll:这些系统调用可监控多个文件描述符,当某个描述符就绪时通知程序。epoll以其高效、非阻塞的特性在高并发环境下尤为适用。 2. AIO(Asynchronous I/O):Linux提供了一套异步I/O接口,允许...

    Linux 系统编程

    而异步I/O如select、poll、epoll等机制,允许程序在等待I/O完成时可以执行其他任务。Linux还提供了内存映射I/O,通过将文件映射到进程地址空间,实现高效的数据交换。 2. **进程管理**:在Linux中,进程是程序的...

    Linux 操作系统编程 系统编程

    5. **I/O模型**:Linux提供了多种I/O模型,如阻塞I/O、非阻塞I/O、I/O复用(select、poll、epoll)、信号驱动I/O和异步I/O。选择合适的I/O模型对于优化性能至关重要。 6. **网络编程**:涉及套接字(socket)编程,...

    重庆大学 操作系统实验三

    10. **I/O模型**:阻塞I/O、非阻塞I/O、I/O复用(如select、poll、epoll)和异步I/O(AIO)。 以上内容仅是操作系统实验可能覆盖的部分主题,实际实验内容可能会依据指导老师的要求有所不同。在洪明尖老师的实验中...

    Unix环境高级编程part2

    学习I/O复用(select、poll、epoll)和信号驱动I/O,能够帮助开发者设计高效率的I/O密集型程序。 6. **标准I/O库和重定向**:Unix的stdio库提供了对标准输入、输出和错误的处理,而重定向功能则允许我们灵活地控制...

    06-file_io.zip_file操作_linux poll

    本教程通过一系列示例深入探讨了Linux下的文件I/O操作,其中包括`copy_file`、`lock_set`、`poll`、`select`、`standard_io`和`producer`等核心概念。以下是对这些知识点的详细说明: 1. **copy_file**: `copy_file...

Global site tag (gtag.js) - Google Analytics