做笑话网站赚钱,建设微信商城网站的公司,网络营销案例分析范文,南昌做seo的公司有哪些一、dup/dup2
有时我们希望把标准输入重定向到一个文件#xff0c;或者把标准输出重定向到一个网络连接。系统调用dup和dup2能够复制文件描述符。dup返回新的文件文件描述符#xff08;没有用的文件描述符最小的编号#xff09;。
dup2可以让用户指定返回的文件描述符的值…一、dup/dup2
有时我们希望把标准输入重定向到一个文件或者把标准输出重定向到一个网络连接。系统调用dup和dup2能够复制文件描述符。dup返回新的文件文件描述符没有用的文件描述符最小的编号。
dup2可以让用户指定返回的文件描述符的值如果需要则首先接近newfd的值他通常用来重新打开或者重定向一个文件描述符。 1、dup函数 dup函数创建一个新的文件描述符该新文件描述符和原有文件描述符oldfd指向相同的文件、管道或者网络连接。并且dup返回的文件描述符总是取系统当前可用的最小整数值。 dup和dup2失败时返回-1并设置errno。 1.打开一个新文件 2.关掉标准输出文件符 3.调用dup给文件描述符 4.此时文件描述符变为1 5.将所要打印数据重定向到文件中 #includestdio.h
#includeunistd.h
#includefcntl.h
#includestring.h
#includestdlib.hint main()
{//打开一个文件int fd open(./test, O_CREAT | O_RDWR, 0666);if(fd 0){perror(open);return 1;}//1、关闭标准输出文件描述符close(1);//2、进行重定向使用最小未被使用的1来替代fd,即new_fd值是1指向fd的表项int new_fd dup(fd);if(new_fd 0){perror(dup);return 2;}close(fd);//关闭不用的文件描述符char buf[1024];while(1){memset(buf,\0,sizeof(buf));ssize_t s read(0,buf,sizeof(buf)-1);if(s 0){buf[s -1] 0;}if(strncmp(quit,buf,4) 0)break;printf(%s\n,buf);//写入文件fflush(stdout);//刷新由行缓存变成了全缓冲}close(new_fd);return 0;
} 2、dup2函数 通过 oldfd 复制出一个新的文件描述符 newfd如果成功newfd 和函数返回值是同一个返回值最终 oldfd 和新的文件描述符 newfd 都指向同一个文件。 oldfd: 需要复制的文件描述符 newfd: 新的文件描述符这个描述符可以人为指定一个合法数字0-1023如果指定的数字已经被占用和某个文件有关联此函数会自动关闭 close() 断开这个数字和某个文件的关联再来使用这个合法数字。 返回值 成功返回 newfd 失败返回 -1 #include stdio.h
#include sys/types.h
#include sys/socket.h
#include arpa/inet.h
#include stdlib.h
#include string.h
#include unistd.hstatic void usage(const char* proc)
{printf(Usage:%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(sock0){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]);int ret connect(sock,(struct sockaddr*)peer,sizeof(peer));if(ret0){perror(connect);printf(%s\n,strerror(ret));return 3;}int dup dup2(sock,1);//将标准输出重定向至sockchar buf[1024];while(1){printf(Please enter:);fflush(stdout);ssize_t sread(0,buf,sizeof(buf));if(s0){perror(read);return 4;}buf[s-1]0;if(strncmp(quit,buf,4) 0)break;printf(%s,buf);//往sock中写入消息fflush(stdout);}ssize_t _s read(sock,buf,sizeof(buf));close(dup);close(sock);printf(sock:%s,buf);return 0;
}