栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

dup2 / dup-为什么我需要复制一个文件描述符?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

dup2 / dup-为什么我需要复制一个文件描述符?

dup系统调用复制了一个现有的文件描述符,并返回了一个新的文件描述符,该描述符引用了相同的基础I / O对象。

Dup允许Shell执行以下命令:

ls existing-file non-existing-file > tmp1  2>&1

2>&1告诉外壳程序给命令一个文件描述符2,它是描述符1的副本(即stderr&stdout指向相同的fd)。
现在,在 tmp1 文件中显示了在 不存在的文件 上调用 ls 的错误消息以及在 现有文件 上的 ls 的正确输出。


以下示例代码使用标准输入连接到管道的读取端运行程序wc。

int p[2];char *argv[2];argv[0] = "wc";argv[1] = 0;pipe(p);if(fork() == 0) {    close(STDIN); //CHILD CLOSING stdin    dup(p[STDIN]); // copies the fd of read end of pipe into its fd i.e 0 (STDIN)    close(p[STDIN]);    close(p[STDOUT]);    exec("/bin/wc", argv);} else {    write(p[STDOUT], "hello worldn", 12);    close(p[STDIN]);    close(p[STDOUT]);}

子进程将读取端复制到文件描述符0上,关闭p中的文件描述符,然后执行wc。当wc从其标准输入中读取时,它将从管道中读取。
这就是使用dup实现管道的方式,好吧,现在使用dup一次使用管道来构建其他东西,这就是系统调用的美,您使用已经存在的工具来构建另一件东西,这些工具又是使用等等。最后,系统调用是您在内核中获得的最基本的工具

干杯:)



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/408773.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号