Linux文件I/O模型
Linux文件I/O模型 文件阻塞|非阻塞
1 普通文件创写读不会阻塞
#include <fcntl.h> #include <stdio.h> #include <unistd.h> void write_file(int fd){ char buf[]="abcde\n"; write(fd,buf,sizeof(buf)); close(fd); } void read_file(){ int fd; char *path="./test1.txt"; char result[20]; fd=open(path,O_RDONLY); read(fd,result,10); printf("The content is %s",result); close(fd); } int create_file(){ int fd; char *path="/home/zhf/test1.txt"; fd=creat(path,00777); return fd; } int main(){ read_file(); }
2 终端设备和网络读取会阻塞
终端代码
#include <unistd.h> #include <stdlib.h> #include <stdio.h> int main(void) { char buf[10]; int n; n = read(STDIN_FILENO, buf, 10); // #define STDIN_FILENO 0 STDOUT_FILENO 1 STDERR_FILENO 2 if(n < 0){ perror("read STDIN_FILENO"); //printf("%d", errno); exit(1); } write(STDOUT_FILENO, buf, n); return 0; }
服务端
//服务器端 #include<stdio.h> #include<stdlib.h> #include<string.h> #include<errno.h> #include<sys/types.h> #include<sys/socket.h> #include<netinet/in.h> #define MAXLINE 4096 int main(int argc, char** argv) { int listenfd, connfd; struct sockaddr_in servaddr; char buff[4096]; int n; if( (listenfd = socket(AF_INET, SOCK_STREAM, 0)) == -1 ){ printf("create socket error: %s(errno: %d)\n",strerror(errno),errno); exit(0); } memset(&servaddr, 0, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_addr.s_addr = htonl(INADDR_ANY); servaddr.sin_port = htons(6666); if( bind(listenfd, (struct sockaddr*)&servaddr, sizeof(servaddr)) == -1){ printf("bind socket error: %s(errno: %d)\n",strerror(errno),errno); exit(0); } if( listen(listenfd, 10) == -1){ printf("listen socket error: %s(errno: %d)\n",strerror(errno),errno); exit(0); } printf("======waiting for client's request======\n"); while(1){ if( (connfd = accept(listenfd, (struct sockaddr*)NULL, NULL)) == -1){ printf("accept socket error: %s(errno: %d)",strerror(errno),errno); continue; } n = recv(connfd, buff, MAXLINE, 0); buff[n] = '\0'; printf("recv msg from client: %s\n", buff); close(connfd); } close(listenfd); }
使用nc测试
nc 192.168.0.3 6666
3 总结
阻塞与非阻塞是对于文件而言 而不是read,write,终端和网络文件是阻塞的
相关推荐
KilluaZoldyck 2020-01-06
OwenJi 2020-06-01
qscool 2020-05-10
jackalwb 2020-02-11
alwayshelloworld 2013-06-30
cmsmdn 2019-12-17
小仙儿 2019-12-01
PHP恶魔笔记 2019-11-21
xuyunti 2019-11-05
mingmingini 2011-03-06
Scorpionbao 2011-03-06
hickwu 2011-02-18
过儿古墓 2011-01-14
linuxisperfect 2010-12-12
xz0mzq 2011-09-02
柯利南 2011-04-16
lianweikj0 2019-11-04
NameCHC 2019-10-29