7

Ubuntu 11.10 を使用しています。端末を開いて次のように呼び出すとps all、端末ウィンドウのサイズに切り詰められた結果 (つまり、各行に最大 100 文字) が表示されます。
私が電話するとps all > file、行は切り捨てられず、すべての情報がファイルに含まれています(〜200文字の行があります)

Cでは、同じことを達成しようとしていますが、行が切り捨てられます。 popenの変種と同様に
試しました。 システム (および popen) で使用されているシェルは、デフォルトで各行の出力を 80 に設定していると仮定します。これは、popen を使用して解析する場合に意味がありますが、ファイルにパイプしているため、ファイルのサイズを無視することを期待しています。シェルで実行したときに経験したようなシェル。
int rc = system("ps all > file");

TL;DR C アプリケーションから呼び出されたときに行が切り捨てられない
ようにするにはどうすればよいですか?ps all > file

4

1 に答える 1

6

回避策として、呼び出し時に-wor-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 に答える