Linux 1.文件编程(dup、dup2)

news/2024/11/16 3:42:15/

重定向

  • 重定向是什么?
  • dup
  • dup2

重定向是什么?

进程在最开始运行的时候,首先打开了三个文件,分别是标准输入流、标准输出流、标准错误输出流。证明的时候我是把标准输出留给关闭了,然后紧接着创建的文件就会占用已关闭的标准输出流,使得本该流向显示器的数据流向了新创建的文件。先不谈底层的原理,就只看表象,就像是使数据流的方向从一个方向,指向了另一个方向,完成了数据流的方向重定向。现在再次理解重定向就好理解得多了:重新锚定方向
————————————————

                        版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/qq_63412763/article/details/127732577

dup

#include <unistd.h>int dup(int fd);
int dup2(int fd1,int fd2);

两个均为复制一个现存的文件的描述。

两个函数的返回:若成功为新的文件描述,若出错为-1;

由dup返回的新文件描述符一定是当前可用文件描述中的最小数值。用dup2则可以用fd2参数指定新的描述符数值。如果fd2已经打开,则先关闭。若fd1=fd2,则dup2返回fd2,而不关闭它。通常使用这两个系统调用来重定向一个打开的文件描述符。

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <unistd.h>/** ./dup 1.txt* argc    = 2* argv[0] = "./dup"* argv[1] = "file"* ...*/int main(int argc, char **argv)
{char buf[10];char buf2[10];if (argc != 2){printf("Usage: %s <file>\n", argv[0]);return -1;}int fd = open(argv[1], O_RDONLY);int fd2 = open(argv[1], O_RDONLY);int fd3 = dup(fd);printf("fd = %d\n", fd);printf("fd2 = %d\n", fd2);printf("fd3 = %d\n", fd3);if (fd < 0 || fd2 < 0 || fd3 < 0){printf("can not open %s\n", argv[1]);return -1;}read(fd, buf, 1);read(fd2, buf2, 1);printf("data get from fd : %c\n", buf[0]);printf("data get from fd2: %c\n", buf2[0]);read(fd3, buf, 1);printf("data get from fd3: %c\n", buf[0]);return 0;
}

在这里插入图片描述

dup2

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>/** ./dup2 1.txt* argc    = 2* argv[0] = "./dup2"* argv[1] = "file"* ...
*/int main(int argc,char **argv)
{int fd = 0;if(argc < 2){printf("Usage:%s <file>\n",argv[0]);return -1;}fd = open(argv[1],O_RDWR | O_CREAT | O_TRUNC,0666);if(fd < 0){printf("Can not open %s!\n",argv[1]);printf("errno = %d\n",errno);printf("%s\n",strerror(errno));return -1;}else{printf("fd = %d\n",fd);}dup2(fd,1);printf("hello,world\n");return 0;
}

在这里插入图片描述


http://www.ppmy.cn/news/1423126.html

相关文章

上班记事备忘的软件有什么 工作记事本软件

在繁忙的工作节奏中&#xff0c;我常常感到自己的记忆力似乎不够用。开会时&#xff0c;脑海中灵光一闪的想法&#xff0c;转眼就忘得一干二净&#xff1b;与客户的约定&#xff0c;总是在忙碌中错过。记性不好&#xff0c;不仅影响了工作效率&#xff0c;更让我在同事和客户面…

c++ 拷贝构造函数 简单实验

1.概要 什么时候调用拷贝构造&#xff0c;就是有对象创建的时候&#xff0c;就会调用拷贝构造&#xff0c;无论对象是构造&#xff08;类&#xff08;来源&#xff09;&#xff09;还是赋值&#xff08;对象&#xff09;都会调用拷贝构造。 赋值函数调用的时机是两个对象都已经…

想要私域流量翻倍?这四个关键要素绝对不能错过!

在当今“得流量者得天下”的时代&#xff0c;拥有稳定且高质量的私域流量对于企业或是个人来说至关重要。然而&#xff0c;如何才能实现私域流量翻倍呢&#xff1f; 今天就给大家分享私域流量的四个关键要素&#xff0c;让大家都能实现私域流量的快速增长。 第一个&#xff1…

ChatGPT之道:巧用写作技巧

ChatGPT无限次数:点击直达 ChatGPT之道&#xff1a;巧用写作技巧 在当今快节奏的社会中&#xff0c;写作是一项非常重要的技能&#xff0c;不仅可以帮助我们有效表达思想&#xff0c;还可以提升个人能力和吸引力。而借助人工智能技术&#xff0c;如OpenAI推出的ChatGPT&#x…

遇事不决 量子力学?

文章目录 引入量子力学产生的必然性量子力学名称的由来粒子&#xff1f;波&#xff1f;波粒二象性测不准原理 &#xff08;不确定原理&#xff09;叠加态原理 量子纠缠态叠加量子纠缠量子纠缠实验 逻辑判断&#xff0c;量子力学到底完善吗观测量子纠缠&#xff1f;那我们宏观世…

Java面试:MySQL面试题汇总

1.说一下 MySQL 执行一条查询语句的内部执行过程&#xff1f; 答&#xff1a;MySQL 执行一条查询的流程如下&#xff1a; 客户端先通过连接器连接到 MySQL 服务器&#xff1b;连接器权限验证通过之后&#xff0c;先查询是否有查询缓存&#xff0c;如果有缓存&#xff08;之前…

小米su7全力提高产能,小米su7的这几个问题你都知道吗?车载随身wifi哪款最好用?公认最好的随身wifi格行随身wifi怎么样?

小米汽车官方近日回应网友关切&#xff0c;透露小米SU7非创始版交付进度。工厂正处于生产爬坡阶段&#xff0c;正全力提升产能和物料准备节奏&#xff0c;以加快交付效率。对于锁单后能否调整提车时间&#xff0c;小米汽车表示将与销售沟通协商。 当然关于网友们的问题也进行了…

5504-EK 5504-DK 5504-KBD 5504FX-EK 法国DREAM SAM5504B开发板

5504-EK 5504-DK 5504-KBD 5504FX-EK 法国DREAM SAM5504B开发板 可用于电子鼓、电子琴、电吉他、效果器、均衡器、啸叫抑制器等电声产品领域