使用system()运行系统命令并发送输出

时间:2016-09-30 20:13:33

标签: c linux popen

所以我要做的是调用带有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));

1 个答案:

答案 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);