当前位置: 首页 > news >正文

做企业网站的人才/外链发布软件

做企业网站的人才,外链发布软件,新疆建设兵团监狱管理局网站,网络优化工程师面试题文件描述符的复制 dup 和 dup2 是两个非常有用的系统调用,都是用来复制一个文件的描述符,使新的文件描述符也标识旧的文件描述符所标识的文件。 int dup(int oldfd); int dup2(int oldfd, int newfd);dup 和 dup2 经常用来重定向进程的 stdin、stdout …

文件描述符的复制
dup 和 dup2 是两个非常有用的系统调用,都是用来复制一个文件的描述符,使新的文件描述符也标识旧的文件描述符所标识的文件。

int dup(int oldfd); 
int dup2(int oldfd, int newfd);

dup 和 dup2 经常用来重定向进程的 stdin、stdout 和 stderr。
回顾:ls > test.txt

包含头文件#include <unistd.h>

dup 函数介绍
int dup(int oldfd);

  • 功能:复制 oldfd 文件描述符,并分配一个新的文件描述符,新的文件描述符是调用进程文件描述符表中最小可用 的文件描述符。
  • 参数:要复制的文件描述符 oldfd。
  • 返回值:成功:新文件描述符。 失败:返回-1,错误代码存于 errno 中。

dup2 函数介绍
int dup2(int oldfd, int newfd)

  • 功能:复制一份打开的文件描述符 oldfd,并分配新的文件描述符 newfd,newfd 也标识 oldfd 所标识的文件。
  • 注意:newfd 是小于文件描述符最大允许值的非负整数,如果 newfd 是一个已经打开的文件描述符,则会关闭该文件,然后再复制。
  • 参数:要复制的文件描述符 oldfd 分配的新的文件描述符 newfd
  • 返回值:成功:返回 newfd 失败:返回-1,错误代码存于 errno 中

案例1:dup实现printf输出重定向的功能

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>int main(int argc, char *argv[])
{//如果需要实现输出重定向的功能//首先像printf函数是操作文件描述符1所对应的文件,//默认是操作终端,只要能够把1对应标识的文件改变,就可以实现输出重定向//所以实现创建好文件对应的文件描述符之后,将1文件描述符关闭,接着通过dup//函数复制的新的文件描述符就是1,这样printf函数对1操作,就写到了文件中int fd_file;fd_file = open("test.txt", O_WRONLY | O_CREAT | O_TRUNC, 0664);if(fd_file == -1){perror("fail to open");exit(1);}close(1);int fd = dup(fd_file);printf("hello world\n");printf("fd = %d\n", fd);return 0;
}

执行结果:
在这里插入图片描述
案例2:dup实现输出重定向后,还想标准输出,如何实现

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>int main(int argc, char *argv[])
{int fd1;int fd2;fd2 = dup(1);printf("new:fd2 = %d\n",fd2);fd1 = open("test.txt", O_RDWR | O_CREAT, 0664);close(1);int fd3 = dup(fd1);printf("hello world\n");printf("fd = %d\n", fd3);close(1);int fd4 = dup(fd2);printf("nihao beijing\n");printf("fd = %d\n", fd4);return 0;
}

执行结果:
在这里插入图片描述
案例3:dup2实现printf输出重定向

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>int main(void)
{int fd1;int fd2;fd1 = open("test.txt", O_CREAT | O_WRONLY, 0664);if (fd1 < 0){perror("fail to open");exit(1);}//首先关闭1文件描述符,然后将fd1复制给1,意味着1和fd1都标识test.txt文件,返回值跟1是一样的fd2 = dup2(fd1, 1);printf("hello world\n");printf("fd2 = %d\n", fd2);return 0;
}

执行结果:
在这里插入图片描述
案例4: dup2实现输出重定向后,再恢复标准输出

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>int main(int argc, char *argv[])
{int fd1;//如果使用dup2,则需要实现给第二个参数对应的变量赋一个初始值int fd2 = 3;//将1复制一份为fd2,所以fd2标识的是标准输出dup2(1, fd2);printf("fd2 = %d\n", fd2);fd1 = open("test.txt", O_CREAT | O_RDWR, 0664);//输出重定向:关闭文件描述符1,将fd1复制一份为1,所以1此时标识的是test.txt文件dup2(fd1, 1);printf("hello world\n");//再次实现标准输出:关闭文件描述符1,将fd2复制一份为1,所以1此时标识的是标准输出dup2(fd2, 1);printf("你好北京\n");return 0;
}

执行结果:
在这里插入图片描述

http://www.jmfq.cn/news/4987261.html

相关文章:

  • 软件下载官网源码/福州seo关键字推广
  • html5响应式网站建设平台/简易的旅游网页制作
  • 一个网站如何做桌面快捷链接/网络电商推广方案
  • vue和react可以做pc网站吗/营销图片素材
  • 曲阳网站建设推广/2023全民核酸又开始了
  • 用自己电脑做网站的空间/东莞做网站优化
  • 福建省建设人才与科技发展中心网站首页/百度如何推广产品
  • 手机做网站视频/单页网站seo如何优化
  • 河北沧州做网站的电话/百度统计收费吗
  • 网站建设及维护涉及哪些内容/申泽seo
  • 商务网站创建流程是什么/游戏优化大师官方下载
  • 江苏网站制作/最新国际新闻10条
  • 小米路由可以做网站吗/2345网址导航电脑版官网
  • 天长做网站公司/软文大全800字
  • 加强政府网站的建设管理/seo长尾快速排名
  • 摄影后期教程网站/三明网站seo
  • 做感恩网站的图片素材/太原百度推广开户
  • 广州网站建设中心/免费网站seo优化
  • 怎样做自己网站/什么是seo?
  • 怎么用模板建站/佛山seo按效果付费
  • 申请网站平台怎么做/谷歌浏览器网页版入口在哪里
  • 天津百度推广排名优化/专业seo网络推广
  • 网站建设山东/网络运营商
  • 如何学做网站优化/seo技术蜘蛛屯
  • 用淘宝做公司网站/搜索引擎优化的各种方法
  • 建仿网站/大连中小企业网络营销
  • 网站是否被k/腾讯企点下载
  • 小米网站建设案例/深圳专门做seo的公司
  • 做外贸怎么看外国网站/合理使用说明
  • 企业电子商务网站建设规划/雅诗兰黛网络营销策划书