質問で、「ここに言語名を入力」を「C」で上書きしてください。
「ソースコード」を #include <unistd.h> から } までで上書きしてください。
exec の代わりに system ではダメなんですか?
C
1#include <stdio.h> // fgets, sprintf, printf
2#include <stdlib.h> // system
3
4int main(int argc, char *argv[])
5{
6 char line[128];
7 char cmd[256];
8 printf("cal ");
9 while (fgets(line, 128, stdin) != NULL) {
10 sprintf(cmd, "cal %s", line);
11 system(cmd);
12 printf("CAL ");
13 }
14 return 0;
15}
Ubuntu (Linux) での実行結果
text
1cal (Enter)
2 November 2020
3Su Mo Tu We Th Fr Sa
4 1 2 3 4 5 6 7
5 8 9 10 11 12 13 14
615 16 17 18 19 20 21
722 23 24 25 26 27 28
829 30
9
10CAL 12 2020 (Enter)
11 December 2020
12Su Mo Tu We Th Fr Sa
13 1 2 3 4 5
14 6 7 8 9 10 11 12
1513 14 15 16 17 18 19
1620 21 22 23 24 25 26
1727 28 29 30 31
18
19CAL 2020 (Enter)
20 2020
21 January February March
22Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa
23 1 2 3 4 1 1 2 3 4 5 6 7
24 5 6 7 8 9 10 11 2 3 4 5 6 7 8 8 9 10 11 12 13 14
2512 13 14 15 16 17 18 9 10 11 12 13 14 15 15 16 17 18 19 20 21
2619 20 21 22 23 24 25 16 17 18 19 20 21 22 22 23 24 25 26 27 28
2726 27 28 29 30 31 23 24 25 26 27 28 29 29 30 31
28
29
30 April May June
31Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa
32 1 2 3 4 1 2 1 2 3 4 5 6
33 5 6 7 8 9 10 11 3 4 5 6 7 8 9 7 8 9 10 11 12 13
3412 13 14 15 16 17 18 10 11 12 13 14 15 16 14 15 16 17 18 19 20
3519 20 21 22 23 24 25 17 18 19 20 21 22 23 21 22 23 24 25 26 27
3626 27 28 29 30 24 25 26 27 28 29 30 28 29 30
37 31
38
39 July August September
40Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa
41 1 2 3 4 1 1 2 3 4 5
42 5 6 7 8 9 10 11 2 3 4 5 6 7 8 6 7 8 9 10 11 12
4312 13 14 15 16 17 18 9 10 11 12 13 14 15 13 14 15 16 17 18 19
4419 20 21 22 23 24 25 16 17 18 19 20 21 22 20 21 22 23 24 25 26
4526 27 28 29 30 31 23 24 25 26 27 28 29 27 28 29 30
46 30 31
47
48 October November December
49Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa
50 1 2 3 1 2 3 4 5 6 7 1 2 3 4 5
51 4 5 6 7 8 9 10 8 9 10 11 12 13 14 6 7 8 9 10 11 12
5211 12 13 14 15 16 17 15 16 17 18 19 20 21 13 14 15 16 17 18 19
5318 19 20 21 22 23 24 22 23 24 25 26 27 28 20 21 22 23 24 25 26
5425 26 27 28 29 30 31 29 30 27 28 29 30 31
55
56CAL (Ctrl-D)
追記
system ではなく、fork と execvp で書いてみました。
C
1#include <stdio.h> // fgets, printf
2#include <string.h> // strtok
3#include <unistd.h> // execvp, fork
4#include <wait.h> // wait
5
6int main(void)
7{
8 char line[128], *argv[32] = { "/usr/bin/cal" };
9 printf("cal ");
10 while (fgets(line, sizeof line, stdin)) {
11 int i = 1;
12 argv[i] = strtok(line, " \t\n");
13 while (i < 31 && argv[i]) argv[++i] = strtok(NULL, " \t\n");
14 if (fork() == 0) execvp(argv[0], argv);
15 wait(NULL);
16 printf("CAL ");
17 }
18 return 0;
19}