gpt4 book ai didi

c - read() write() 通过 dup2() 与 stdin 和 stdout 写入 pipe()

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:02:31 24 4
gpt4 key购买 nike

我需要模拟 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);
}

不幸的是,这段代码没有显示任何内容。你能帮我解决这个问题吗?

最佳答案

这看起来像是作业,所以我会给你一个解决问题的方法:

  1. 让它与一个日历一起工作,一次读取一行并写入标准输出。
  2. 现在将每一行存储在一个字符串数组中,并在读入整个日历后打印出每一行。
  3. 让它与三个日历一起工作,将每个日历的结果存储到三个单独的字符串数组中,然后打印出所有三个(不是相邻的)。
  4. 不是打印出一个日历中的所有行,然后是下一个日历中的所有行,等等,而是打印出每个日历中的第一行,然后是每个日历中的第二行,等等。
  5. 修改格式,直到看起来正确为止。

关于c - read() write() 通过 dup2() 与 stdin 和 stdout 写入 pipe(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/711437/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com