回答編集履歴
2
system の代わりに fork/execvp を使うコードを追加
answer
CHANGED
@@ -77,4 +77,27 @@
|
|
77
77
|
25 26 27 28 29 30 31 29 30 27 28 29 30 31
|
78
78
|
|
79
79
|
CAL (Ctrl-D)
|
80
|
+
```
|
81
|
+
**追記**
|
82
|
+
system ではなく、fork と execvp で書いてみました。
|
83
|
+
```C
|
84
|
+
#include <stdio.h> // fgets, printf
|
85
|
+
#include <string.h> // strtok
|
86
|
+
#include <unistd.h> // execvp, fork
|
87
|
+
#include <wait.h> // wait
|
88
|
+
|
89
|
+
int main(void)
|
90
|
+
{
|
91
|
+
char line[128], *argv[32] = { "/usr/bin/cal" };
|
92
|
+
printf("cal ");
|
93
|
+
while (fgets(line, sizeof line, stdin)) {
|
94
|
+
int i = 1;
|
95
|
+
argv[i] = strtok(line, " \t\n");
|
96
|
+
while (i < 31 && argv[i]) argv[++i] = strtok(NULL, " \t\n");
|
97
|
+
if (fork() == 0) execvp(argv[0], argv);
|
98
|
+
wait(NULL);
|
99
|
+
printf("CAL ");
|
100
|
+
}
|
101
|
+
return 0;
|
102
|
+
}
|
80
103
|
```
|
1
誤字修正(exex -> exec)
answer
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
質問で、「ここに言語名を入力」を「C」で上書きしてください。
|
2
2
|
「ソースコード」を #include <unistd.h> から } までで上書きしてください。
|
3
3
|
|
4
|
-
|
4
|
+
exec の代わりに system ではダメなんですか?
|
5
5
|
```C
|
6
6
|
#include <stdio.h> // fgets, sprintf, printf
|
7
7
|
#include <stdlib.h> // system
|