回答編集履歴
2
system の代わりに fork/execvp を使うコードを追加
test
CHANGED
@@ -157,3 +157,49 @@
|
|
157
157
|
CAL (Ctrl-D)
|
158
158
|
|
159
159
|
```
|
160
|
+
|
161
|
+
**追記**
|
162
|
+
|
163
|
+
system ではなく、fork と execvp で書いてみました。
|
164
|
+
|
165
|
+
```C
|
166
|
+
|
167
|
+
#include <stdio.h> // fgets, printf
|
168
|
+
|
169
|
+
#include <string.h> // strtok
|
170
|
+
|
171
|
+
#include <unistd.h> // execvp, fork
|
172
|
+
|
173
|
+
#include <wait.h> // wait
|
174
|
+
|
175
|
+
|
176
|
+
|
177
|
+
int main(void)
|
178
|
+
|
179
|
+
{
|
180
|
+
|
181
|
+
char line[128], *argv[32] = { "/usr/bin/cal" };
|
182
|
+
|
183
|
+
printf("cal ");
|
184
|
+
|
185
|
+
while (fgets(line, sizeof line, stdin)) {
|
186
|
+
|
187
|
+
int i = 1;
|
188
|
+
|
189
|
+
argv[i] = strtok(line, " \t\n");
|
190
|
+
|
191
|
+
while (i < 31 && argv[i]) argv[++i] = strtok(NULL, " \t\n");
|
192
|
+
|
193
|
+
if (fork() == 0) execvp(argv[0], argv);
|
194
|
+
|
195
|
+
wait(NULL);
|
196
|
+
|
197
|
+
printf("CAL ");
|
198
|
+
|
199
|
+
}
|
200
|
+
|
201
|
+
return 0;
|
202
|
+
|
203
|
+
}
|
204
|
+
|
205
|
+
```
|
1
誤字修正(exex -> exec)
test
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
|
5
5
|
|
6
6
|
|
7
|
-
exe
|
7
|
+
exec の代わりに system ではダメなんですか?
|
8
8
|
|
9
9
|
```C
|
10
10
|
|