dup2函数

xiaoxiao2021-02-28  96

dup/dup2          

           dup2和dup都可用来复制一个现存的文件描述符,使两个文件描述符指向同一个file结构体。如果两个文件描述符指向同一个file结构体,File Status Flag和读写位置只保存一份在file结构体中,并且file结构体的引用计数是2。如果两次open同一文件得到两个文件描述符,则每个描述符对应一个不同的file结构体,可以有不同的File Status Flag和读写位置。

client.c代码

#include<stdio.h> #include<sys/types.h> #include<sys/socket.h> #include<stdlib.h> #include<arpa/inet.h> #include<netinet/in.h> #include<string.h> static void usage(const char *proc) { printf("%s[server ip] [server port]\n",proc); } int main(int argc,char* argv[]) { if(argc != 3) { usage(argv[0]); return 1; } int sock = socket(AF_INET,SOCK_STREAM,0); if(sock < 0){ perror("socket"); return 2; } struct sockaddr_in peer; peer.sin_family = AF_INET; peer.sin_port = htons(atoi(argv[2])); peer.sin_addr.s_addr = inet_addr(argv[1]); if(connect(sock,(struct sockaddr*)&peer,sizeof(peer)) < 0){ perror("connect"); return 3; } close(1); int ret = dup2(sock,1); if(ret < 0){ perror("dup2\n"); exit(1); } char buf[1024]; while(1){ ssize_t s = read(0,buf,sizeof(buf)-1); if(s > 0){ buf[s-1] = 0; //write(sock,buf,strlen(buf)); if(strncmp("quit",buf,4) == 0){ break; } printf("%s\n",buf); fflush(stdout); } } close(sock); return 0; }

转载请注明原文地址: https://www.6miu.com/read-52671.html

最新回复(0)