涂鸦-草稿:select简单示例
2017-06-14 15:09
169 查看
涂鸦-草稿:select简单示例
注:本文程序来自《Unix-Linux编程实践教程》一书,以下代码为我自己试验所写。A Sample – Select:
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <fcntl.h> #include <sys/time.h> #include <sys/types.h> #define oops(m, x) {perror(m);exit(x);} int main(int ac, char *av[]) { int fd1, fd2; struct timeval timeout; fd_set readfds; int maxfd; int retval; if (ac != 4) { fprintf(stderr, "usage: %s file file timeout", *av); exit(1); } if ((fd1 = open(av[1], O_RDONLY)) == -1) oops(av[1], 2); if ((fd2 = open(av[2], O_RDONLY)) == -1) oops(av[2], 3); fprintf(stdout, "fd1 is %d\n", fd1); fprintf(stdout, "fd2 is %d\n", fd2); maxfd = 1 + (fd1>fd2?fd1:fd2); while (1) { FD_ZERO(&readfds); FD_SET(fd1, &readfds); FD_SET(fd2, &readfds); timeout.tv_sec = atoi(av[3]); timeout.tv_usec = 0; retval = select(maxfd, &readfds, NULL, NULL, &timeout); if (retval == -1) oops("select", 4); if (retval > 0) { if (FD_ISSET(fd1, &readfds)) showdata(av[1], fd1); if (FD_ISSET(fd2, &readfds)) showdata(av[2], fd2); } else fprintf(stdout, "no input after %d seconds\n", atoi(av[3])); } return 0; } void showdata(char *fname, int fd) { char buf[1024]; int n; fprintf(stdout, "fname is:%s\n", fname); n = read(fd, buf, 1024); if (n == -1) oops(fname, 5); char info[] = "info is : "; write(1, info, strlen(info)); write(1, buf, n); write(1, "\n", 1); }
现在开两个终端:
[kk@localhost ~]$ tty /dev/pts/9
[kk@localhost ~]$ tty /dev/pts/11
[kk@localhost ~]$ ./selectdemo /dev/pts/9 /dev/pts/11 3 fd1 is 3 fd2 is 4 no input after 3 seconds ……
尝试在不同终端输入一些命令试下~
关键点:
fd_set xxx FD_ZERO(&xxx) FD_SET(fd, &xxx) FD_ISSET(fd, &xxx) select(maxfds, &xxx, NULL, NULL, &timeval-struct)
相关文章推荐
- s:doubleselect 简单示例
- Bash Shell中的select命令简单使用示例
- select并行处理的一个简单示例
- Bash Shell中的select命令简单使用示例
- Angular6 写一个简单的Select组件示例
- Linux应用编程基础之多路复用:select和poll的简单使用示例
- 简单实用jquery版三级联动select示例
- 获取select的value、text值的简单示例(jquery与javascript)
- select简单示例,有注释
- 在Struts2的官方网站上,有doubleselect的用法示例,但是那个例子比较简单。 <s:doubleselect label="doubleselect test2" name="menu" list="#{'fruit':'Nice Fruit
- Linux网络编程echo简单示例2--select实现
- 简单实用jquery版三级联动select示例
- Java RMI 简单示例
- 异步Socket通信的一个简单示例
- Tomcat4/5连接池的设置及简单应用示例
- 简单的Spring.Net示例
- Java 5.0 新增 Autoboxing & Unboxing 功能的简单示例
- [ASP]小偷程序原理和简单示例
- Tomcat4/5连接池的设置及简单应用示例
- ADODC控件简单应用示例