centos_71 发表于 2015-02-01 09:41

[结贴]为什么dup总是复制一个fd到标准输出? 这是默认的行为吗?

本帖最后由 centos_71 于 2015-02-02 20:43 编辑

dup函数只有一个参数,也就是输入一个fd,可是没有另外一个参数说,要把这个fd复制给谁?
下面这个小程序,调用fd的结果是,打开的一个文件fd被复制到了标准输出,以至于execl调用的打印内容,被重定向到了文件当中。
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/stat.h>
int main(void){
    int filedes;
    if((filedes=open("dd.txt",O_WRONLY|O_CREAT,S_IRUSR|S_IWUSR))<0)
      fprintf(stderr,"%s ","open file error");
    close(1);
    dup(filedes);
    close(filedes);
    execlp("ls","-l",(char * )0);
    return 0;
}
所以看起来dup程序就是要复制一个fd到stdout。是这样的吗,如果我要dup到stdout以外的fd怎么办呢?

super皮波 发表于 2015-02-01 09:42

dup到最小的可用文件描述符

centos_71 发表于 2015-02-01 13:32

回复 2# super皮波

原来是dup到一个最小的可用的文件描述符。我有点入门了,谢谢。

爻易 发表于 2015-02-01 16:02

要复制原描述符到一个指定的描述符,可用dup2或dup3
页: [1]
查看完整版本: [结贴]为什么dup总是复制一个fd到标准输出? 这是默认的行为吗?