select函数监控一个或多个文件描述符状态程序
来源:互联网 发布:zdm cad辅助设计软件 编辑:程序博客网 时间:2024/06/07 01:21
/* 一个文件描述符监控 */#include <stdio.h>#include <sys/time.h>#include <sys/types.h>#include <unistd.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <errno.h>#define PATH "/tmp/test_file"int main (void){int fd = 0;int fd_max = 0;fd_set fd_sets;fd_set handle_sets;int rs = 0;char buff[128] = {0};int i = 0;fd = open (PATH, O_RDWR | O_CREAT, 0664);if (fd <= 0)perror ("open:");FD_ZERO (&fd_sets);FD_SET (fd, &handle_sets);if (fd > fd_max) {fd_max = fd;}while (1) {if (i >= 1)break;fd_sets = handle_sets; // 保存handle_setsrs = select (fd_max + 1, &fd_sets, NULL, NULL, NULL);if(rs < 0){if(errno == EINTR){continue;}else{break;}}else if(rs == 0){continue;}else{if (FD_ISSET (fd, &fd_sets)) {rs = read (fd, buff, sizeof (buff));if (rs <= 0) {continue;}printf ("buff = %s\n", buff);lseek (fd, 0, SEEK_SET);i++;}}}return 0;}
/* 三个(多个)文件描述符监控 */#include <stdio.h>#include <sys/time.h>#include <sys/types.h>#include <unistd.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <errno.h>#define PATH1 "/tmp/test_file1"#define PATH2 "/tmp/test_file2"#define PATH3 "/tmp/test_file3"typedef struct device_file {char *file_name;int fd;} device_file_t;static device_file_t g_device_file[] ={{PATH1, 0},{PATH2, 0},{PATH3, 0},};int main (void){int fd = 0;int fd_max = 0;fd_set fd_sets;fd_set handle_sets;int rs = 0;int i = 0;int index = 0;char buff[128] = {0};FD_ZERO (&fd_sets);for (index = 0; index < sizeof (g_device_file)/sizeof (device_file_t); index++){fd = 0;fd = open (g_device_file[index].file_name, O_RDWR | O_CREAT, 0664);if (fd <= 0)perror ("open:");g_device_file[index].fd = fd;FD_SET (fd, &handle_sets);if (fd > fd_max) {fd_max = fd;}}while (1) {if (i >= 1)break;fd_sets = handle_sets; rs = select (fd_max + 1, &fd_sets, NULL, NULL, NULL);if(rs < 0){if(errno == EINTR){continue;}else{break;}}else if(rs == 0){continue;}else{for (index = 0; index < sizeof (g_device_file)/sizeof (device_file_t); index++) {fd = g_device_file[index].fd;if (FD_ISSET (fd, &fd_sets)) {rs = read (fd, buff, sizeof (buff));if (rs <= 0) {continue;}printf ("buff = %s\n", buff);lseek (fd, 0, SEEK_SET);i++;}}}}return 0;}
验证结果:
阅读全文
0 0
- select函数监控一个或多个文件描述符状态程序
- Linux select学习笔记(附:监测多个文件描述符状态的例子)
- Linux select学习笔记(附:监测多个文件描述符状态的例子)
- select函数——单进程监视多个文件描述符
- select函数——单进程监视多个文件描述符
- Select函数文件描述符集的准备条件
- 一个关于dup、dup2 文件描述符重定向函数的程序
- UNIX/Linux中的文件按描述符标志或文件状态标志的修改,即 “与或非” 操作
- 文件描述符 文件描述标志 文件状态标志
- 文件描述符 文件描述标志 文件状态标志
- IO转接中用到的select函数FD_ZERO等文件描述符操作函数
- select函数的第一个参数为什么是最大描述符加1呢
- Select()系统以及文件描述符
- Linux select 文件描述符1024限制
- 写一个程序描述进程状态迁移过程
- 文件描述符——select()函数以及FD_ZERO、FD_SET、FD_CLR、FD_ISSET
- 一个bat文件打开多个程序
- 程序集中的一个或多个类型无法加载
- Web并发模型入门
- 解决中文乱码问题
- Java-多线程实现售票
- 关注民生民情
- 第十二天
- select函数监控一个或多个文件描述符状态程序
- SQL Server 无法删除发布服务解决方法
- C语言连接mysql数据库
- linux的mariadb数据库
- hdu6096(字典树)
- 关注国情民情,从身边做起
- 关注民生民情
- 使用SQL Server发布数据库快照遇到错误:对路径“xxxxx”访问被拒绝的解决方法
- App的手势密码你做对了吗?