7

我正在使用 Ubuntu 11.10。如果我打开一个终端并调用:ps all我将结果截断(即每行最多 100 个字符)到终端窗口的大小。
如果我调用ps all > file这些行不会被截断并且所有信息都在文件中(有一行大约 200 个字符)

在 C 中,我试图实现相同的目标,但行被截断。
我已经尝试
int rc = system("ps all > file"); 过以及 popen 的变体。
我假设系统(和popen)使用的shell默认每行的输出为80,如果我使用popen解析它是有意义的,但是由于我将它传递到一个文件,我希望它忽略大小就像我在 shell 中做的那样。

TL;DR
如何确保ps all > file从 C 应用程序调用时不截断行?

4

1 回答 1

6

作为一种解决方法,请尝试在调用它时传递-w或可能传递-ww给它。ps

从手册页(BSD):

-w      Use 132 columns to display information, instead of the default which is your 
        window size.  If the -w option is specified more than once, ps will use as many
        columns as necessary without regard for your window size.  When output is
        not to a terminal, an unlimited number of columns are always used.

Linux:

-w      Wide output. Use this option twice for unlimited width.

或者,

fork/exec/wait您自己而不是使用system;可能会取得一些成功 为简洁起见省略错误处理:

#include <unistd.h>
#include <stdio.h>

pid_t pid = fork();

if (!pid) {
   /* child */
   FILE* fp = fopen("./your-file", "w");
   close(STDOUT_FILENO);
   dup2(fileno(fp), STDOUT_FILENO);
   execlp("ps", "ps", "all", (char*)NULL);
} else {
  /* parent */
  int status;
  wait(&status);
  printf("ps exited with status %d\n", status);
}
于 2012-04-24T13:01:27.700 回答