在TCP
client-server
实现中,我设置客户端发送一个shell命令,由服务器运行,然后服务器将操作系统的响应发送回客户端。
using namespace std;
string run_shell()
{
// return buffer
char buffer[1024];
memset(buffer, 0, 1024);
//fork child
int pid = fork();
//Child
if(!pid)
{
char* args[] = {"ls", "-l", NULL};
int status = execvp("ls", args);
if(status < 0)
{
cout << "Error: executing shell command failed!" << endl;
return "";
}
int out_pipe[2];
// save stdout
int saved_stdout = dup(STDOUT_FILENO);
pipe(out_pipe);
// redirect stdout to the pipe
dup2(out_pipe[1], STDOUT_FILENO);
close(out_pipe[1]);
// read from pipe into buffer
read(out_pipe[0], buffer, 1024);
}
//Parent
else
{
}
return buffer;
}
字符串
产出:
在服务器终端:
Server received a message
ls -l
-rw-r--r-- 1 XXXX XXXX 4865 Jul 15 12:27 Client.cpp
-rw-r--r-- 1 XXXX XXXX 281 Jul 15 16:40 client_main.cpp
-rw-r--r-- 1 XXXX XXXX 12008 Jul 15 17:06 client_main.o
Server sent a message
型
在客户端:
Client sent a message
ServerMessage: -> `�7��
型
我想得到服务器执行的命令的STDOUT作为string
提供给客户端。从我所做的,我总是得到垃圾在客户端。
有人能帮我解决这个问题吗?父分支中应该有一些重定向的部分,但我不能正确编码。
1条答案
按热度按时间anhgbhbe1#
解决方法:
字符串