【问题标题】:Run a system command with system() and send output使用 system() 运行系统命令并发送输出
【发布时间】:2016-09-30 20:13:33
【问题描述】:

所以我要做的是使用system() 函数调用系统命令,然后无论其输出是什么,我都想将其发送给客户端(套接字连接)。

客户端可以发送各种消息。它可以是ls,但也可能是qwerty。我想将输出作为const void* buffer 参数放在write() 函数中。我见过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));

【问题讨论】:

  • 你在哪里打电话给system()
  • @Code-Apprentice 正上方
  • 似乎命令行中的命令也不会是文件名。
  • 您启动该命令两次,一次是调用system,一次是调用popen。这肯定不是你想做的。
  • @Code-Apprentice 除了我链接的主题之外,我找不到任何相关主题

标签: c linux popen


【解决方案1】:

您应该只使用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);

【讨论】:

    猜你喜欢
    • 2010-10-13
    • 2019-03-29
    • 2013-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-05
    • 1970-01-01
    • 2023-03-10
    相关资源
    最近更新 更多