【发布时间】:2013-04-22 01:46:55
【问题描述】:
我想在我的程序中设置 2 个管道。我有 1 个管道工作正常,但我不知道在哪里放置第二个管道。
我的设置的伪代码如下所示,
这里是带花括号的,抱歉
//the first pipe:
pipe(pipe1)
//the second pipe:
pipe(pipe2)
pid = fork()
if(pid == 0) {
dup2(pipe1[1], 1)
close(pipe1[0])
execvp(beforepipe)
}
if(pid > 0) { //everything below is in here
pid2 = fork()
if(pid2 == 0){
//pipe1
dup2(pipe1[0],0)
dup2(out,1)
close(pipe1[1])
execvp(afterpipe)
//pipe2 does not work might need to be placed in different area
dup2(pipe1[1],1)
close(pipe1[0])
execvp(beforepipe1)
}
if(pid2 > 0){
close(pipe[0])
close(pipe[1])
wait() //this is an infinite for loop
pid3 = fork()
if(pid3 == 0){
dup2(pipe2[0],0)
dup2(out,1)
close(pipe2[1])
execvp(afterpipe2)
}
if(pid3 > 0) {
close(pipe2[0])
close(pipe2[1])
wait()
}
}
第二个管道的位置错误或代码完全错误。
有什么建议吗?
【问题讨论】:
-
你到底想做什么?你能展示一下管道应该是什么样子吗? (例如
<program1> ->pipe1-> <program2> ->pipe2-> <program3>让程序 1 通过管道 1 写入程序 2,程序通过管道 2 写入程序 3) -
/ma/cs570/Data1/input1 cat|tr a-z A-Z | tr \\ q > your.outputc 这是我要开始工作的命令。基本上,第一个管道将 input1 中的“eschew obfuscation\”转换为“eschew OBFUSCATION\”。第二个管道用 q 替换“\”以获得“ESCHEW OBFUSCATIONq”。第一个管道正在工作,但第二个没有。
-
我还得到“tr:当不截断 set1 时,string2 在输出中必须非空”以及 your.outputc 中的“ESCHEW OBFUSCATION\”
-
我得到 tr 错误的原因是因为 "\\" 被跳过并且 tr 后面需要 2 个字符串。会努力修复这个错误
标签: c operating-system pipe execvp dup2