dup2 如何使用
请问一下 dup2 如何使用的, 查了好多资料, 始终不明白参数是如何传递的.我想要把下面的程序通过dup2来实现, 能不能帮我看一下
[table=95%][tr][td][font=FixedSys][color=#000000][color=#FF9900]/*------------------------*/[/color]
[color=#FF9900]/* pipe3.c*/[/color]
[color=#0000CC]#[/color][color=#FF0000]include[/color] [color=#0000CC]<[/color]unistd[color=#0000CC].[/color]h[color=#0000CC]>[/color]
[color=#0000CC]#[/color][color=#FF0000]include[/color] [color=#0000CC]<[/color]stdlib[color=#0000CC].[/color]h[color=#0000CC]>[/color]
[color=#0000CC]#[/color][color=#FF0000]include[/color] [color=#0000CC]<[/color]stdio[color=#0000CC].[/color]h[color=#0000CC]>[/color]
[color=#0000CC]#[/color][color=#FF0000]include[/color] [color=#0000CC]<[/color]pthread[color=#0000CC].[/color]h[color=#0000CC]>[/color]
[color=#0000FF]int[/color] main[color=#0000CC]([/color][color=#0000CC])[/color]
[color=#0000CC]{[/color]
[color=#0000FF]int[/color] data_processed[color=#0000CC];[/color]
[color=#0000FF]int[/color] file_pipes[color=#0000CC][[/color]2[color=#0000CC]][/color][color=#0000CC];[/color]
[color=#0000FF]const[/color] [color=#0000FF]char[/color] some_data[color=#0000CC][[/color][color=#0000CC]][/color][color=#0000CC]=[/color][color=#FF00FF]"123"[/color][color=#0000CC];[/color]
[color=#0000FF]char[/color] buffer[color=#0000CC][[/color]BUFSIZ[color=#0000CC]+[/color]1[color=#0000CC]][/color][color=#0000CC];[/color]
[color=#FF0000]pid_t[/color] fork_result[color=#0000CC];[/color]
[color=#FF0000]memset[/color][color=#0000CC]([/color]buffer[color=#0000CC],[/color] [color=#FF00FF]'\0'[/color][color=#0000CC],[/color] [color=#0000FF]sizeof[/color][color=#0000CC]([/color]buffer[color=#0000CC])[/color][color=#0000CC])[/color][color=#0000CC];[/color]
[color=#0000FF]if[/color][color=#0000CC]([/color]pipe[color=#0000CC]([/color]file_pipes[color=#0000CC])[/color] [color=#0000CC]=[/color][color=#0000CC]=[/color] 0[color=#0000CC])[/color]
[color=#0000CC]{[/color]
fork_result [color=#0000CC]=[/color] fork[color=#0000CC]([/color][color=#0000CC])[/color][color=#0000CC];[/color]
[color=#0000FF]if[/color][color=#0000CC]([/color]fork_result [color=#0000CC]=[/color][color=#0000CC]=[/color] [color=#0000CC]-[/color]1[color=#0000CC])[/color]
[color=#0000CC]{[/color]
[color=#FF0000]fprintf[/color][color=#0000CC]([/color][color=#FF0000]stderr[/color][color=#0000CC],[/color] [color=#FF00FF]"Fork failure"[/color][color=#0000CC])[/color][color=#0000CC];[/color]
[color=#FF0000]exit[/color][color=#0000CC]([/color][color=#FF0000]EXIT_FAILURE[/color][color=#0000CC])[/color][color=#0000CC];[/color]
[color=#0000CC]}[/color]
[color=#0000FF]if[/color][color=#0000CC]([/color]fork_result [color=#0000CC]=[/color][color=#0000CC]=[/color] 0[color=#0000CC])[/color]
[color=#0000CC]{[/color]
[color=#FF0000]sprintf[/color][color=#0000CC]([/color]buffer[color=#0000CC],[/color] [color=#FF00FF]"%d"[/color][color=#0000CC],[/color] file_pipes[color=#0000CC][[/color]0[color=#0000CC]][/color][color=#0000CC])[/color][color=#0000CC];[/color]
[color=#0000CC]([/color][color=#0000FF]void[/color][color=#0000CC])[/color]execl[color=#0000CC]([/color][color=#FF00FF]"pipe4"[/color][color=#0000CC],[/color][color=#FF00FF]"pipe4"[/color][color=#0000CC],[/color] buffer[color=#0000CC],[/color] [color=#0000CC]([/color][color=#0000FF]char[/color][color=#0000CC]*[/color][color=#0000CC])[/color]0[color=#0000CC])[/color][color=#0000CC];[/color]
[color=#FF0000]exit[/color][color=#0000CC]([/color][color=#FF0000]EXIT_FAILURE[/color][color=#0000CC])[/color][color=#0000CC];[/color]
[color=#0000CC]}[/color]
[color=#0000FF]else[/color]
[color=#0000CC]{[/color]
data_processed [color=#0000CC]=[/color] [color=#FF0000]write[/color][color=#0000CC]([/color]file_pipes[color=#0000CC][[/color]1[color=#0000CC]][/color][color=#0000CC],[/color] some_data[color=#0000CC],[/color] [color=#FF0000]strlen[/color][color=#0000CC]([/color]some_data[color=#0000CC])[/color][color=#0000CC])[/color][color=#0000CC];[/color]
[color=#FF0000]printf[/color][color=#0000CC]([/color][color=#FF00FF]"%d - wrote %d bytes\n"[/color][color=#0000CC],[/color] [color=#0000CC]([/color][color=#0000FF]int[/color][color=#0000CC])[/color]getpid[color=#0000CC]([/color][color=#0000CC])[/color][color=#0000CC],[/color] data_processed[color=#0000CC])[/color][color=#0000CC];[/color]
[color=#0000CC]}[/color]
[color=#0000CC]}[/color]
[color=#FF0000]exit[/color][color=#0000CC]([/color][color=#FF0000]EXIT_SUCCESS[/color][color=#0000CC])[/color][color=#0000CC];[/color]
[color=#0000CC]}[/color]
[/color][/font][/td][/tr][/table]
[table=95%][tr][td][font=FixedSys][color=#000000][color=#FF9900]/* pipe4 */[/color]
[color=#0000CC]#[/color][color=#FF0000]include[/color] [color=#0000CC]<[/color]unistd[color=#0000CC].[/color]h[color=#0000CC]>[/color]
[color=#0000CC]#[/color][color=#FF0000]include[/color] [color=#0000CC]<[/color]stdlib[color=#0000CC].[/color]h[color=#0000CC]>[/color]
[color=#0000CC]#[/color][color=#FF0000]include[/color] [color=#0000CC]<[/color]stdio[color=#0000CC].[/color]h[color=#0000CC]>[/color]
[color=#0000CC]#[/color][color=#FF0000]include[/color] [color=#0000CC]<[/color][color=#FF0000]string[/color][color=#0000CC].[/color]h[color=#0000CC]>[/color]
[color=#0000FF]int[/color] main[color=#0000CC]([/color][color=#0000FF]int[/color] argc[color=#0000CC],[/color] [color=#0000FF]char[/color] [color=#0000CC]*[/color]argv[color=#0000CC][[/color][color=#0000CC]][/color][color=#0000CC])[/color]
[color=#0000CC]{[/color]
[color=#0000FF]int[/color] data_processed[color=#0000CC];[/color]
[color=#0000FF]char[/color] buffer[color=#0000CC][[/color]BUFSIZ [color=#0000CC]+[/color]1[color=#0000CC]][/color][color=#0000CC];[/color]
[color=#0000FF]int[/color] file_descriptor[color=#0000CC];[/color]
[color=#FF0000]memset[/color][color=#0000CC]([/color]buffer[color=#0000CC],[/color] [color=#FF00FF]'\0'[/color][color=#0000CC],[/color] [color=#0000FF]sizeof[/color][color=#0000CC]([/color]buffer[color=#0000CC])[/color][color=#0000CC])[/color][color=#0000CC];[/color]
[color=#FF0000]sscanf[/color][color=#0000CC]([/color]argv[color=#0000CC][[/color]1[color=#0000CC]][/color][color=#0000CC],[/color] [color=#FF00FF]"%d"[/color][color=#0000CC],[/color] [color=#0000CC]&[/color]file_descriptor[color=#0000CC])[/color][color=#0000CC];[/color]
data_processed [color=#0000CC]=[/color] [color=#FF0000]read[/color][color=#0000CC]([/color]file_descriptor[color=#0000CC],[/color] buffer[color=#0000CC],[/color] BUFSIZ[color=#0000CC])[/color][color=#0000CC];[/color]
[color=#FF0000]printf[/color][color=#0000CC]([/color][color=#FF00FF]"%d - read %d bytes: %s\n"[/color][color=#0000CC],[/color] getpid[color=#0000CC]([/color][color=#0000CC])[/color][color=#0000CC],[/color] data_processed[color=#0000CC],[/color] buffer[color=#0000CC])[/color][color=#0000CC];[/color]
[color=#FF0000]exit[/color][color=#0000CC]([/color][color=#FF0000]EXIT_SUCCESS[/color][color=#0000CC])[/color][color=#0000CC];[/color]
[color=#0000CC]}[/color]
[/color][/font][/td][/tr][/table]
输出:
$ ./pipe3
980 - wrote 3 bytes
981 - read 3 bytes: 123
程序pipe3中调用pipe4, 我想知道如果用 dup2来实现是怎么改的. 参考APUE中的例子。 APUE? APUE
Advanced Programming Unix Environment
Unix环境高级编程,经典书籍,本论坛“资源下载”板块就有下载,同时也建议购买一本,终身受用! [quote]原帖由 [i]linuxpk[/i] 于 2008-5-4 14:57 发表 [url=http://bbs.linuxpk.com/redirect.php?goto=findpost&pid=49156&ptid=14214][img]http://bbs.linuxpk.com/images/common/back.gif[/img][/url]
APUE
Advanced Programming Unix Environment
Unix环境高级编程,经典书籍,本论坛“资源下载”板块就有下载,同时也建议购买一本,终身受用! [/quote]
就是他:lol :lol dup2简单的说,就是使用第二个fd,来重定向第一个fd. [url]http://www.linuxpk.com/37747/viewspace-11403.html[/url]
看一下这的介绍 请问搂主,你的代码怎么拷贝出彩色的来的啊?
很重要
[[i] 本帖最后由 Flyinmorning 于 2008-5-22 11:38 编辑 [/i]]
页:
[1]