gpt4 book ai didi

c - 使用 execve 系统调用在 C 中进行网络编程

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

我正在尝试创建一个简单的客户端/服务器程序,它允许客户端使用 TCP 套接字连接到服务器,然后允许用户从客户端向服务器端发出系统调用并将回复返回给用户。例如:

客户端问题:ls

服务器会在/usr/bin 或 w/e 中找到 ls 然后使用 execve() 执行它

我还会有类似 lls 或 lmkdir 等的东西,它们会在客户端发出系统调用。

问题是我的 execve() 似乎没有正确运行,因为实际上没有调用“ls”或任何其他命令。我以前只在本地端(没有服务器或任何东西)做过同样类型的程序,并且 execve() 工作正常。这是一些代码:

       pid = fork();

if(pid){ // Child
printf("child wait");
pid = wait(&status);
printf("Child dead\n");
}else{ // Parent

if(execPath){

execve(execPath, arglist, env);
printf("Command Complete\n");

}

}

由于某种原因,PID 语句的子部分中的 printfs 根本没有执行。我不认为系统实际上曾经 fork 过一个进程。由于它是客户端/服务器类型的程序,我是否需要做一些特别的事情才能使它工作,或者它应该完全一样工作?

谢谢

最佳答案

确切地说,execve 不会 fork 。它用指定为其参数的图像替换当前图像并从其开始(即main())开始。它永远不会返回到您的原始程序。

您可能想在您的用例中使用 system()

关于c - 使用 execve 系统调用在 C 中进行网络编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15074311/

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