gpt4 book ai didi

更改文件描述符以将 STDOUT 管道传输到套接字?

转载 作者:行者123 更新时间:2023-12-04 06:29:59 24 4
gpt4 key购买 nike

我打开了一个套接字,它连接客户端和服务器。

我正在实现远程执行,因此我想更改文件描述符表,这样通常会转到 stdout 的调用实际上会通过套接字在客户端上输出。

现在我有服务器分支,然后使用 system() 命令来执行任何命令。

我该怎么做才能操作文件描述符表?

这是我正在使用的代码:

我正在使用选择。我使用的套接字是接受调用返回的套接字(这都是服务器端)。

            dup2(S,1);

int retval = fork();
if (retval > 1)
{
system(receive.text);
return 0;
}

现在的结果是,没有文本打印到服务器(所以它显然没有连接到服务器的标准输出中),但客户端上也没有显示任何内容)。

我是否需要在客户端做更多的事情来解决这个问题(比如 recv() 调用?),我是否使用了正确的套接字?

谢谢。

最佳答案

通常的机制是dup2(2) :

#include <unistd.h>

int dup(int oldfd);
int dup2(int oldfd, int newfd);
dup(2) call 会将给定的文件描述符复制到编号最低的打开文件描述符。这是历史机制,仍然有效,但是指定文件描述符编号并不容易。所以 dup2(2)被引入以允许指定两个文件描述符。

你可以这样使用它:
int s = /* connect() or accept() */
int ret = dup2(s, 1);
/* exec() */

关于更改文件描述符以将 STDOUT 管道传输到套接字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5533720/

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