如何在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)的输出吗?

execvp
没有输出值(因为从
exec
函数返回是错误的指示)

如果只想要输出,请使用
popen

如果你想要更多的控制权(或者想要重定向进出),请继续阅读

假设要获取在
exec
中运行的程序的输出,则需要执行以下操作:

  • 制作一个管道(使用
    pipe()
  • fork()
  • 在其中一个过程中(通常为子过程):
    • 设置描述符,使1指向管道的写入端(使用
      dup2
    • 关闭同一管道的读取端和另一个写入端
    • exec()
  • 在另一个过程中(通常为家长):
    • 关闭管道的写入端
    • 从管道的读取端读取,直到从写入端关闭
    • 等待子进程退出(请注意,关闭的管道并不等同于终止的进程)
    • 用你从管道里读到的任何东西

我建议您在代码中发布比您想要执行的单个调用更大的部分。更好:为两个应用程序的
main
s提供管道创建和数据发送,并解释出现的问题。帮助你会更容易也许您应该使用
popen
而不是
execvp
?例如,请参见。如果您不想并行执行两个程序,并且第一个程序输出的大小有限,请对第一个程序使用popen(cmd1,“r”)并读取和存储其所有输出,然后使用popen(cmd2,“w”)并写入先前存储的输出。否则,您可以使用fork/pipe,并且不必将第一个命令的输出保存在数组中