如何在c中以字符数组保存命令的输出?
我需要使两个程序相互通信使用管道。第一个程序保存它在管道中的路径,并将其发送给第二个程序,第二个程序应使用该路径运行如何在c中以字符数组保存命令的输出?,c,C,我需要使两个程序相互通信使用管道。第一个程序保存它在管道中的路径,并将其发送给第二个程序,第二个程序应使用该路径运行ls命令,并返回ls的输出。我想这样发送write(fd2,arr2,strlen(arr2)+1)其中fd2是一个包含描述符的整数。我想execvp(“ls”,argv)并将其输出分配给arr2,但我不知道在没有添加文件的情况下如何执行此操作 编辑 基本上,问题是: 如何保存execvp(“ls”,argv)的输出吗?execvp没有输出值(因为从exec函数返回是错误的指示)
ls
命令,并返回ls
的输出。我想这样发送write(fd2,arr2,strlen(arr2)+1)
其中fd2
是一个包含描述符的整数。我想execvp(“ls”,argv)
并将其输出分配给arr2
,但我不知道在没有添加文件的情况下如何执行此操作
编辑
基本上,问题是:
如何保存
execvp(“ls”,argv)的输出数组中的code>吗?execvp
没有输出值(因为从exec
函数返回是错误的指示)
如果只想要输出,请使用popen
如果你想要更多的控制权(或者想要重定向进出),请继续阅读
假设要获取在exec
中运行的程序的输出,则需要执行以下操作:
- 制作一个管道(使用
pipe()
)
fork()
- 在其中一个过程中(通常为子过程):
- 设置描述符,使1指向管道的写入端(使用
dup2
)
- 关闭同一管道的读取端和另一个写入端
exec()
- 在另一个过程中(通常为家长):
- 关闭管道的写入端
- 从管道的读取端读取,直到从写入端关闭
- 等待子进程退出(请注意,关闭的管道并不等同于终止的进程)
- 用你从管道里读到的任何东西
我建议您在代码中发布比您想要执行的单个调用更大的部分。更好:为两个应用程序的main
s提供管道创建和数据发送,并解释出现的问题。帮助你会更容易也许您应该使用popen
而不是execvp
?例如,请参见。如果您不想并行执行两个程序,并且第一个程序输出的大小有限,请对第一个程序使用popen(cmd1,“r”)并读取和存储其所有输出,然后使用popen(cmd2,“w”)并写入先前存储的输出。否则,您可以使用fork/pipe,并且不必将第一个命令的输出保存在数组中