0

我需要模拟 Linux 命令“ cal -3”,它并排显示 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. 让它与一个日历一起工作,一次读取一行并写入标准输出。
  2. 现在将每一行存储在一个字符串数组中,并在读入整个日历后打印出每一行。
  3. 让它与三个日历一起工作,将每个日历的结果存储到三个单独的字符串数组中,然后打印出所有三个(而不是彼此相邻)。
  4. 不是打印出一个日历中的所有行,然后打印下一个日历中的所有行,等等,而是打印出每个日历的第一行,然后打印每个日历的第二行,等等。
  5. 摆弄格式,直到它看起来正确。
于 2009-04-02T20:32:29.857 回答
0

一次显示三个日历与分叉进程无关,实际上您不需要进入管道和其他东西。

您想要使用的是ncurses库来对您的输出进行特殊控制。

于 2009-04-02T20:25:53.070 回答
0

为什么不使用FILE *fp = popen("my command", "r");,将输出读入字符串数组,重复三次并正确连接数组?

于 2009-04-02T22:04:02.507 回答