📄 function
字号:
int my_write(int fd,void *buffer,int length) { int bytes_left; int written_bytes; char *ptr; ptr=buffer; bytes_left=length; while(bytes_left>0) { /* 开始写*/ written_bytes=write(fd,ptr,bytes_left); if(written_bytes<=0) /* 出错了 */ { if(errno==EINTR) /* 中断错误 我们继续写 */ written_bytes=0; else /* 其他错误 没有办法,只好撤退了 */ return(-1); } bytes_left-=written_bytes; ptr+=written_bytes; /* 从剩下的地方继续写 */ } return(0); } int my_read(int fd,void *buffer,int length) { int bytes_left; int bytes_read; char *ptr; bytes_left=length; while(bytes_left>0) { bytes_read=read(fd,ptr,bytes_read); if(bytes_read<0) { if(errno==EINTR) bytes_read=0; else return(-1); } else if(bytes_read==0) break; bytes_left-=bytes_read; ptr+=bytes_read; } return(length-bytes_left); } /* 客户端向服务端写 */ struct my_struct my_struct_client; write(fd,(void *)&my_struct_client,sizeof(struct my_struct); /* 服务端的读 */ char buffer[sizeof(struct my_struct)]; struct *my_struct_server; read(fd,(void *)buffer,sizeof(struct my_struct)); my_struct_server=(struct my_struct *)buffer; /* select */int use_select(int *readfd,int n) { fd_set my_readfd; int maxfd; int i; maxfd=readfd[0]; for(i=1;i<n;i++) if(readfd[i]>maxfd) maxfd=readfd[i]; while(1) { /* 将所有的文件描述符加入 */ FD_ZERO(&my_readfd); for(i=0;i<n;i++) FD_SET(readfd[i],*my_readfd); /* 进程阻塞 */ select(maxfd+1,& my_readfd,NULL,NULL,NULL); /* 有东西可以读了 */ for(i=0;i<n;i++) if(FD_ISSET(readfd[i],&my_readfd)) { /* 原来是我可以读了 */ we_read(readfd[i]); } } }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -