gpt4 book ai didi

C - execvp() 进程间通信

转载 作者:太空宇宙 更新时间:2023-11-04 01:35:30 25 4
gpt4 key购买 nike

大家好,我是 C 语言的新手,如果我很迷茫,请见谅。我在尝试创建这个多线程 Web 服务器时遇到了问题。我正在尝试...

  • 让一个线程创建一个新线程
  • 让新线程执行 execvp() 以调用我机器上的另一个 C 程序
  • 让新线程从 execvp() 返回数据流

我正在考虑使用 pthreads 生成一个新进程来运行 execvp() 并让它通过管道返回数据。但这有必要吗? pthreads不共享内存吗?

此外,我可能正在考虑使用 fork() 而不是 pthread,并让子线程通过管道将数据发送回父线程。

你能帮我指引正确的方向吗?

最佳答案

您正在寻找的是 fork() 的组合,exec 函数之一,以及 pipe()(或可能是 socketpair() 之类的,但管道也可以。

线程共享内存,但是 execvp() 会创建一个全新的进程来替换调用者进程——即使这个进程与其父进程共享内存(我不确定它是否如此! ),新运行的程序将不知道如何使用该内存。

正确的方法是当你还有一个进程的时候打开一个管道,fork()到两个进程(父进程和子进程),让子进程调用execvp()。 child 现在可以写入管道的一端,而 parent 可以从另一端读取。

请记住 wait() 让 child 结束。

关于C - execvp() 进程间通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15153238/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com