0

cal -33か月分のカレンダーを並べて表示するLinuxコマンド""をシミュレートする必要があります。私が今必要としているのは、パイプを使用して実装を機能させることです。使用できないと言われましたが、、、、を3回呼び出すfork()必要があります。現在、私のプログラムはカレンダーを並べて表示しません。dup2()write()read()close()system("myCustomCommand")

パイプを使おうとすると問題が発生しました。これが私が試していることです:

int pfd[2];
int p; //for pipe
int d; //for dup2
const int BSIZE = 256;
char buf[BSIZE];

p = pipe(pfd);
if (p == -1) { perror("pipe"); exit(EXIT_FAILURE); }
if (p == 0)
{
    d = dup2(pfd[1], 0);
    close(pfd[1]);
    nbytes = read (pfd[1], buf , BSIZE);
    close(pfd[0]);
    exit(EXIT_SUCCESS);
}
else
{
    close(pfd[0]);
    write(pfd[1], "test\n", BSIZE);
    close(pfd[1]);
    exit(EXIT_SUCCESS);
}

残念ながら、このコードは何も表示しません。これを手伝ってくれませんか。

4

3 に答える 3

4

これは宿題のように思えるので、問題に取り組む方法を示します。

  1. 1 つのカレンダーで動作し、一度に 1 行ずつ読み取り、stdout に書き込みます。
  2. 各行を文字列の配列に保存し、カレンダー全体を読み取ったら各行を出力します。
  3. 3 つのカレンダーを操作し、それぞれの結果を 3 つの個別の文字列配列に格納してから、3 つすべて (隣り合っていない) を出力します。
  4. 1 つのカレンダーのすべての行を印刷してから、次のカレンダーのすべての行を印刷するのではなく、各カレンダーの最初の行を印刷し、次に各カレンダーの 2 行目を印刷する、というようにします。
  5. 正しく表示されるまで、フォーマットをいじってください。
于 2009-04-02T20:32:29.857 に答える
0

一度に 3 つのカレンダーを表示することは、フォーク プロセスとは何の関係もありません。

使用したいのは、出力を特別に制御するためのncursesライブラリです。

于 2009-04-02T20:25:53.070 に答える