首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

linux系统下dup和dup2函数解析

----今天接着昨天的话题讲,在昨天的文章里面,我们讲到了文件共享有三种实现方式,其中一种实现方式就是我们今天要讲的dup和dup2函数来实现了;那么咋们也就不废话 了,直接直奔主题吧。...函数解析: 1、相比于dup函数,dup2函数它的优势就是可以指定新的文件描述符的大小,用法比较灵活。...\n", fd1); fd2 = dup2(fd1, 16); printf("fd2 = %d....\n", fd2); close(fd1); return -1; } 2、dup2和dup函数一样对文件写操作都是接续写的,这里我就不做演示了,写法和dup函数一样。...上面的源代码链接:https://github.com/1121518wo/linux-/tree/master 三、Linux系统下管道符和重定向的学习补充: 这里可以参考刘遄老师写的<linux就该这么学

81130
您找到你想要的搜索结果了吗?
是的
没有找到

Linux笔记(5)| 文件IO操作(续)

文件指针是包含在动态文件的文件管理表中的,所以可以看出linux系统的进程中不同fd对应的是不同的独立的文件管理表。...系统提供了dup和dup2两个API来让进程复制文件描述符。...4、文件描述符的复制 使用dup和dup2进行文件描述符复制 int dup(int oldfd); int dup2(int oldfd, int newfd); dup系统调用对fd进行复制,会返回一个新的文件描述符...6、标准IO库介绍 标准IO和文件IO有什么区别 (1)看起来使用时都是函数,但是:标准IO是C库函数,而文件IO是linux系统的API (2)C语言库函数是由API封装而来的。...(3)库函数比API还有一个优势就是:API在不同的操作系统之间是不能通用的,但是C库函数在不同操作系统中几乎是一样的。所以C库函数具有可移植性而API不具有可移植性。

1K40

六.Linux管道及重定向

Linux管道及重定向 对shell有一定了解的人都知道,管道和重定向是 Linux 中非常实用的 IPC 机制。在shell中,我们通常使用符合‘|’来表示管道,符号‘>’和‘<’表示重定向。...例如命令ls | grep main.c,使用了管道来连接了两条命令来执行,能够快速地让我们知道当前目录下是否有 main.c 文件。 管道的本质是内存中的缓冲区,可以看作是打开到内存中的文件。...如果我们希望在子进程中执行管道的读端的程序例如ls | grep main.c中的grep main.c;在父进程中执行管道的写端的程序,例如ls | grep main.c中的ls。...那么, 在子进程中,先调用dup2(fd[0],0);此函数就是将标准输入的文件描述符 0,指向了管道的读端。...完整代码实现请参考StupidShell代码仓库 声明:本文为原创,作者为 对弈,转载时请保留本声明及附带文章链接:http://www.duiyi.xyz/linux%e7%ae%a1%e9%81%93%

2.3K20

Linux】基础IO_文件描述符与重定向

环境:centos7.6,腾讯云服务器 Linux文章都放在了专栏:【Linux】欢迎支持订阅 相关文章推荐: 【Linux】冯.诺依曼体系结构与操作系统 【C/进阶】如何对文件进行读写(含二进制...Linux系统下进程会默认打开三个文件,即标准输入、标准输出、标准错误,分别对应文件描述符0 1 2。...因此,我们也可以推测:在C语言级别提供的文件结构体FILE中,一定存在文件描述符!...dup2原理: dup2函数的原理实际上就是通过拷贝的方式,修改原来文件描述符表中特定下标所指向的文件,这里需要注意一点的是,dup2函数在实现重定向时,会先将原有的文件描述符指向的对应的文件关闭,这样避免内存泄漏问题的出现...实际上是由C语言标准库提供,在我们进行fopen打开文件时,缓冲区在FILE结构体内。

17330

基础IO的理解与操作 - fd

目录 一、理解Linux下一切皆文件 1.文件的理解 普通文件的理解 对文件的操作 语言接口和操作系统接口的区别 理解广义文件 2.利用C接口操作文件  打开文件 关闭文件  写操作output C语言默认打开的三个流...下面我们会开始理解系统调用接口,并且接触到类似于C中定义的FILE结构体的东西,同时也是Linux内核内对文件描述的关键东西-文件描述符fd。 ...dup2重定向  函数引用头文件:#include 函数原型:int dup2(int oldfd, int newfd); 解释:         oldfd和newfd均是fd...1指向的位置,即让1也指向fd所指向的文件    printf("dup2 Linux\n");close(fd);} 图片  一切皆文件         Linux的设计哲学是体现在操作系统的设计层面的...不要忘了,Linux也是C语言写的,那么C语言要如何写面向对象的语言呢?甚至运行时多态?类、成员方法 -- 使用struct以及函数指针来进行设计。

68420

Linux】文件操作文件描述符重定向缓冲区

文件操作接口的使用 三、文件描述符 1、什么是文件描述符 2、文件描述符的分配规则 四、重定向 1、什么是重定向 2、dup2 系统调用 3、三种重定向的实现 五、Linux 下一切皆文件 六、缓冲区...3、三种重定向的实现 Linux 中主要有三种主要的重定向 – 输入重定向、输出重定向和追加重定向;在 Linux 命令行中它们分别使用 、>> 表示,如下: 输出重定向 输入重定向我们上面已经实现了...下一切皆文件 在刚开始学习 Linux 的时候,我们就说 Linux 下一切皆文件,包括键盘、显示器、磁盘以及网卡这些硬件,现在我们来正式理解这句话: 在 计算机的软硬件体系结构 中我们学到,操作系统是一款管理软件...(Linux 在编写时C++等面向对象的语言还并没有出现,所以这里是用C语言模拟实现C++面向对象) 同时,struct file 是操作系统当中虚拟出来的一层文件对象,在 Linux 中,我们一般将这一层称为...3、缓冲区的位置 在之前的 进度条代码 中我们知道,我们谈论的所有缓冲区都不在操作系统内核中,而是位于用户级语言层面;实际上,对于C语言来说,缓冲区位于 FILE 结构体中,Linux 下,我们可以在

3.7K00

Linux GNU C 和 ANSI C 的区别

Linux 上可用的 C 编译器是 GNU C 编译器,它建立在自由软件基金会的编程许可证的基础上,因此可以自由发布。GNU C对标准C进行一系列扩展,以增强标准C的功能。...open: generic_file_open, release: ext2_release_file, fsync: ext2_sync_file, }; 但是,Linux...C99已经支持__func__宏,因此建议在Linux编程中不再使用__FUNCTION__,而转而使用__func__: void example(void) { printf("This...Linux内核编程时常用的likely()和unlikely()底层调用的likely_notrace()、unlikely_notrace()就是基于 __builtin_expect(EXP,C)实现的...: gcc -c test.c 如果使用“-ansi–pedantic”编译选项,编译会报警: gcc -ansi -pedantic -c test.c test.c:3: warning: ISO

5.3K40

Linux入侵 反弹shell

同理,Linux中还存在/dev/udp/。 要想了解“>&”和“0>&1”,首先我们要先了解一下Linux文件描述符和重定向。 linux shell下常用的文件描述符是: 1....其实&根本就不是and的意思,学过C/C++的都知道,在这两门语言里,&是取地址符。在这里,我们也可以将它理解为取地址符。...接着执行os库的dup2函数来进行重定向。...dup2传入两个文件描述符,fd1和fd2(fd1是必须存在的),如果fd2存在,就关闭fd2,然后将fd1代表的那个文件强行复制给fd2,fd2这个文件描述符不会发生变化,但是fd2指向的文件就变成了...三个dup2函数先后将socket重定向到标准输入,标准输入,标准错误输出。最后建立了一个子进程,传入参数“-i”使bash以交互模式启动。

6.1K30
领券