所以我要做的是调用带有system()
函数的系统命令,然后无论它输出什么,我都想把它发送到客户端(套接字连接)。
客户端可以发送各种消息。它可以是ls
,但可能是qwerty
。我想取出输出并将其作为write()
参数放在const void* buffer
函数中。我见过this topic,但我可以完成工作。到目前为止,我认为它可以在这些线路的某处,但无论我尝试过什么都行不通。
/* buffer is message from the client: ls, ls -l, whatever*/
system(buffer)
fp = popen(buffer, "r");
if(fp == NULL)
printf("Failed ot run command\n");
while(fgets(path, sizeof(path), fp) != NULL) {
//modify output here?
}
pclose(fp);
write(socket_fd, output, strlen(buffer));
答案 0 :(得分:2)
您应该只使用popen()
而不是system()
,因为它在您链接的问题中有所描述。
您链接的问题中的path
变量似乎被误解了。它包含系统调用的输出。如果您愿意,可以将其重命名为输出。
write()
获取您发送缓冲区的长度。在这种情况下,这将是output
的长度,而不是buffer
的长度。
将所有这些放在一起得到以下结论:
char output[1035];
fp = popen(buffer, "r");
if(fp == NULL)
printf("Failed ot run command\n");
while(fgets(output, sizeof(output), fp) != NULL) {
write(socket_fd, output, strlen(output));
}
pclose(fp);