Linux开发部分代码练习
2018-01-19 15:45
232 查看
1.pipe 通信
#include<stdio.h> #include<unistd.h> #define BUF_SIZE 100 int main(int argc, char *argv[]) { int fds[2]; int fds2[2]; char str[] = "who are you?"; char str2[] = "Thank you from your message"; char buf[BUF_SIZE]; pid_t pid; pipe(fds); pipe(fds2); pid = fork(); if(0 == pid) { write(fds[1],str,sizeof(str)); read(fds2[0],buf,sizeof(buf)); printf("Child proc output:%s\n",buf); } else { read(fds[0],buf,sizeof(buf)); printf("parent proc output:%s\n",buf); write(fds2[1],str2,sizeof(str2)); sleep(3); } return 0; }2.select 用法
#include <stdio.h> #include <unistd.h> #include <sys/time.h> #include <sys/select.h> #define BUF_SIZE 30 int main(int argc, char*argv[]) { fd_set reads,temps; int result,str_len; char buf[BUF_SIZE]; FD_ZERO(&reads); FD_SET(0,&reads); struct timeval timeout; //timeout.tv_sec = 5; //timeout.tv_usec = 5000; while (1) { temps = reads; timeout.tv_sec = 5; timeout.tv_usec = 0; result = select(1,&temps,0,0,&timeout); if(-1 == result) { puts("select() error"); break; } else if(0 == result) { puts("time-out"); } else { if(FD_ISSET(0,&temps)) { str_len = read(0,buf,BUF_SIZE); buf[str_len] = 0; printf("message from console:%s",buf); } } } return 0; }3.
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <arpa/inet.h> #include <sys/socket.h> #include <sys/time.h> #include <sys/select.h> #define BUF_SIZE 100 void error_handling(char *message); int main(int argc, char const *argv[]) { int serv_sock,clnt_sock; struct sockaddr_in serv_adr,clnt_adr; struct timeval timeout; fd_set reads,cpy_reads; socklen_t adr_sz; int fd_max,str_len,fd_num,i; char buf[BUF_SIZE]; if(argc != 2) { printf("Usage:%s <port>\n",argv[0]); exit(1); } serv_sock = socket(AF_INET,SOCK_STREAM,0); memset(&serv_sock,0,sizeof(serv_sock)); serv_adr.sin_family = AF_INET; serv_adr.sin_addr.s_addr = htonl(INADDR_ANY); serv_adr.sin_port = htons(atoi(argv[1])); if(bind(serv_sock,(struct sockaddr *)&serv_adr,sizeof(serv_adr))== -1) { error_handling("bind() error"); } if(listen(serv_sock,5) == -1) { error_handling("listen() error"); } FD_ZERO(&reads); FD_SET(serv_sock,&reads); fd_max = serv_sock; while(1) { cpy_reads = reads; timeout.tv_sec = 5; timeout.tv_usec = 5000; if((fd_num = select(fd_max+1,&cpy_reads,0,0,&timeout))== -1) { break; } if(0 == fd_num) { continue; } for(i = 0;i < fd_max +1; i++) { if(FD_ISSET(i,&cpy_reads)) { if(i == serv_sock) // connetion request! { adr_sz = sizeof(clnt_adr); clnt_sock = accept(serv_sock,(struct sockaddr *)&clnt_adr,&adr_sz); FD_SET(clnt_sock,&reads); if(fd_max < clnt_sock) { fd_max = clnt_sock; } printf("connected client:%d\n",clnt_sock); } else //read message { str_len = read(i,buf,BUF_SIZE); if(str_len == 0) // close request { FD_CLR(i,&reads); close(i); printf("close client:%d\n",i); } else { write(i,buf,str_len); } } } } } close(serv_sock); return 0; } void error_handling(char *buf) { fputs(buf,stderr); fputc('\n',stderr); exit(1); }
相关文章推荐
- Linux 网络代码导读(接收与发送部分)
- MSDN:Windows SharePoint Services 3.0 中使用代码的开发工具和技术(第 2 部分)
- 简化 Ajax 和 Java 开发,第 1 部分: 用 JSP 标记文件动态生成 JavaScript 代码
- ext的tree学习开发流程步骤附加部分代码
- Linux下串口应用开发代码详解
- LINUX嵌入式开发书籍推荐(附WINCE部分)
- Linux下的硬件驱动——USB设备(下)(驱动开发部分)
- 用SVN同VMWARE上的Linux共享代码开发
- KingCMS接触之:模块开发(代码部分之后台)
- Linux 编程,调试,评测,代码静态检查,开发环境工具
- 慢慢分析linux代码--启动部分
- PHP和Mysqlweb应用开发核心技术-第1部分 Php基础-3 代码组织和重用2
- PHP和Mysqlweb应用开发核心技术 第1部分 Php基础-3 代码组织和重用2
- 基于PXA255部分Linux驱动及Android移植开发小结
- 在 PlayStation 3 上进行 Linux 开发,第 3 部分: 采用小工具来瘦身 X11
- KingCMS接触之:模块开发(代码部分之后台按钮操作)
- MSDN:Windows SharePoint Services 3.0 中使用代码的开发工具和技术(第 1 部分)
- 转 Linux下的硬件驱动——USB设备(下)(驱动开发部分)
- Linux下的硬件驱动——USB设备(下)(驱动开发部分)
- linux kernel arm 汇编代码部分的一点知识