my dup2】的更多相关文章

dup2的函数定义为: #include <unistd.h> int dup2(int src_fd, int new_fd); 自己实现dup2函数有几个关键点: 1,检查给定的源fd是否有效,且都大于0, 2,检查目标fd是否超出了系统设定的范围,而这个值在书上是没有着重指出的, 比如mac限制了要小于256,ubuntu限制是1024. 3,源fd与目标fd是否相等, 4,利用系统的特性:dup总是返回最小可用的fd,不断重复dup,从而得到一个等于new_fd的fd值 再清除掉new…
在前面,介绍了一种进程间的通信方式:使用信号,我们创建通知事件,并通过它引起响应,但传递的信息只是一个信号值.这里将介绍另一种进程间通信的方式——匿名管道,通过它进程间可以交换更多有用的数据. 一.什么是管道 如果你使用过Linux的命令,那么对于管道这个名词你一定不会感觉到陌生,因为我们通常通过符号“|"来使用管道,但是管理的真正定义是什么呢?管道是一个进程连接数据流到另一个进程的通道,它通常是用作把一个进程的输出通过管道连接到另一个进程的输入. 举个例子,在shell中输入命令:ls -l…
今天和同学探讨了一下关于重定向输出到文件的问题,其中需要用到dup和dup2函数,因此来小小的总结一下. 首先来man一下: dup直接返回一个新的描述符和原来的描述符一样代表同一个资源,描述符的值就从当前未使用的最小的描述符来取. 而dup2则是可以指定描述符的值,这样通过把文件的描述符指定为STDOUT_FILENO,这样就相当于重定向输出为文件了. 所以有以下程序: #include <stdio.h> #include <unistd.h> #include <fcn…
一.首先需要看一下这两个函数的作用: #include <unistd.h> int dup(int oldfd); int dup2(int oldfd, int newfd); 根据manual的解释: dup:创建一份oldfd的拷贝,使用最小的文件描述符作为新的文件描述符. dup2:创建一份oldfd的拷贝,使用指定的newfd作为新的文件描述符. 要看这两个函数是怎么实现的,首先得知道Linux对于文件描述符是怎么处理的,参考这篇文章. 二.分析dup static inline…
#define STR "xiamanman\n"#define STR_LEN 10#define STDOUT 1 #include <stdio.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h> int main(){ int fd = open("./temp", O_CREAT|O_RDWR|O_APPEND); int s_fd…
系统调用dup和dup2能够复制文件描述符.dup返回新的文件文件描述符(没有用的文件描述符最小的编号).dup2可以让用户指定返回的文件描述符的值,如果需要,则首先接近newfd的值,他通常用来重新打开或者重定向一个文件描述符. 他的原型如下: #include <unsitd.h> int dup(int oldfd); int dup2(int oldfd,int newfd); dup 和dup2都是返回新的描述符.或者返回-1并设置 errno变量.新老描述符共享文件的偏移量(位置)…
下面两个函数都可用来复制一个现存的文件描述符: #include<unistd.h> int dup(int filedes); int dup2(int filedes,int filedes2); 两函数的返回值:若成功则返回新的文件描述符,若出错则返回-1 由dup返回的新文件描述符一定是当前可用文件描述符中的最小值.用dup2则可以用filedes2参数指定新描述符的数值.如果filedes2已经打开,则现将其关闭.如若filedes等于filedes2,则dup2返回filedes2…
疑问:管道应该不是这样实现的,因为这要求修改程序的代码 dup和dup2也是两个非常有用的调用,它们的作用都是用来复制一个文件的描述符.它们经常用来重定向进程的stdin.stdout和stderr.这两个函数的原形如下: #include <unistd.h> int dup( int oldfd ); int dup2( int oldfd, int targetfd ); dup()函数 利用函数dup,我们可以复制一个描述符.传给该函数一个既有的描述符,它就会返回一个新的描述符,这个新…
下面两个函数都可用来复制一个现有的文件描述符: #include <unistd.h> int dup( int filedes ); int dup2( int filedes, int filedes2 ); 两函数的返回值:若成功则返回新的文件描述符,若出错则返回- 由dup返回的新文件描述符一定是当前可用文件描述符中的最小数值.用dup2则可以用filedes2参数指定新描述符的数值.如果filedes2已经打开,则先将其关闭.如若filedes等于filedes2,则dup2返回fi…
#include <stdio.h> #include <sys/types.h> #include <sys/wait.h> #include <unistd.h> int main() { ]; pid_t pid; pipe( fds ); pid = fork(); ) { close( fds[] ); dup2(fds[], STDIN_FILENO ); execlp( ); } else { FILE *stream; close(fds[]…