0

好的,我需要让这个程序cal并排显示“” 3 个月(前一个月和后一个月),而不是在任何 Linux/UNIX 中仅显示一个月。我通过使用 " system(customCommand)" 三次来显示 3 个日历;但它不是并排的。

我得到了一些使用以下系统调用的提示:

close(..) pipe(..) dup2(..) read(..) and write(..)

我的问题是我应该从什么开始?我需要创建子进程而不是捕获它pipe(..)吗?

如何并排显示三个日历。

前任。

    February 2009          March 2009             April 2009
 S  M Tu  W Th  F  S    S  M Tu  W Th  F  S    S  M Tu  W Th  F  S
 1  2  3  4  5  6  7    1  2  3  4  5  6  7             1  2  3  4
 8  9 10 11 12 13 14    8  9 10 11 12 13 14    5  6  7  8  9 10 11
15 16 17 18 19 20 21   15 16 17 18 19 20 21   12 13 14 15 16 17 18
22 23 24 25 26 27 28   22 23 24 25 26 27 28   19 20 21 22 23 24 25
                       29 30 31               26 27 28 29 30
4

6 回答 6

6

假设您想自己编写而不是使用“cal -3”,我会做什么(在伪代码中):

popen three calls to "cal" with the appropriate args

while (at least one of the three pipes hasn't hit EOF yet)
{
  read a line from the first if it isn't at EOF
  pad the results out to a width W, print it
  read a line from the second if it isn't at EOF
  pad the results out to a width W, print it
  read a line from the third if it isn't at EOF
  print it
  print "\n"
}

pclose all three.
于 2009-03-31T19:38:36.730 回答
6

如果“cal -3”不起作用,只需使用粘贴 :)

$ TERM=linux setterm -regtabs 24
$ paste <(cal 2 2009) <(cal 3 2009) <(cal 4 2009)
    febbraio 2009            marzo 2009              aprile 2009
do lu ma me gi ve sa    do lu ma me gi ve sa    do lu ma me gi ve sa
 1  2  3  4  5  6  7     1  2  3  4  5  6  7              1  2  3  4
 8  9 10 11 12 13 14     8  9 10 11 12 13 14     5  6  7  8  9 10 11
15 16 17 18 19 20 21    15 16 17 18 19 20 21    12 13 14 15 16 17 18
22 23 24 25 26 27 28    22 23 24 25 26 27 28    19 20 21 22 23 24 25
                        29 30 31                26 27 28 29 30

$   

setterm 忽略 -regtabs除非TERM=linuxTERM=con。)

于 2009-03-31T19:45:35.387 回答
3

做就是了

cal -3 
于 2009-03-31T19:32:11.613 回答
1

这不起作用吗?

cal -3

于 2009-03-31T19:33:27.697 回答
1

好的,怎么样cal -3

cal -3 12 2120使它成为一个特殊的月份和年份,一个之前和一个之后。

于 2009-03-31T19:33:28.427 回答
0

我将为此使用的方法是捕获输出,将其分成几行,然后将这些行彼此相邻打印出来。不过,我可能会用 Perl 而不是 C 来做。

或者只使用 cal -3,如果你的 cal 有的话。

于 2009-03-31T19:32:49.287 回答