C - 在系统函数调用后将 SHELL 输出保存在文件中

标签 c file shell system ping

我需要帮助来在从 C 控制台应用程序进行系统调用后保存 shell 输出。

我需要将 shell 命令 ping 的输出保存在一个文件中,以进行一些操作。 我已经尝试过使用这个命令:

system(ping -c 5 google.com ./out > output.txt);

但我只会找到一个空文件,并且该命令不起作用。

有人可以帮助我吗? (我在 UNIX/LINUX 中工作)

最佳答案

ping 命令的最后一个参数是您要 ping 的目标。因为您有一个杂散参数 ./out,所以 ping 尝试对其进行 ping 操作,但显然该命令失败。 检查system命令的返回码可以告诉你是否成功。因此,删除它并将正确的参数传递给 ping 将修复它:

system("ping -c 5 google.com > output.txt");

考虑到您要将输出重定向到文本文件并对其进行一些处理,使用 popen() 可能更合适。函数并直接读取输出。

例如,

FILE *fp;
char buf[1024];

fp = popen("ping -c 5 google.com", "r");

if (fp == NULL) {
    /* handle error */
}

while (fgets(buf, sizeof buf, fp)) {
   /*process each line here*/
}

关于C - 在系统函数调用后将 SHELL 输出保存在文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34393019/

相关文章:

c - 在 while 循环中使用 scanf 读取带有空格的用户输入?

c++ - 使用 C 或 C++ 编写 Linux shell

从 char * 复制到 char 数组

ios - 如何快速下载文件?

c - 在没有数组或函数的情况下以相反的顺序打印数字的数字

c# - 递归获取文件 : skip files/directories that cannot be read?

linux - 如何使用 bash/shell 脚本创建 RS256 JWT 断言?

bash - 是否可以在 bash 子 shell 中重用只读变量?

c - 检测重复项的程序

c++ - 为什么我的程序在打开 mkfifo-ed 管道时挂起?