teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

例文の変更

2018/11/05 00:19

投稿

katsuko
katsuko

スコア3601

answer CHANGED
@@ -58,6 +58,9 @@
58
58
 
59
59
  fd = open("test01.c", O_RDONLY);
60
60
  dup2(fd, 0);
61
+ // これでもいいと思うが、
61
- execlp("cat", "cat", NULL);
62
+ //execlp("cat", "cat", NULL);
63
+ // こちらのほうがわかりやすいかと。
64
+ execlp("sed", "sed", "-e", "s/test01/aaaa01/", NULL);
62
65
  }
63
66
  ```

1

コメントに対する返答

2018/11/05 00:19

投稿

katsuko
katsuko

スコア3601

answer CHANGED
@@ -36,4 +36,28 @@
36
36
 
37
37
  こっちの方が読み込みをaplayの方に任せられる分、問題が起きにくいのではないかと。
38
38
 
39
- これで解決するかどうかわかりませんが、というか自分で試していないので動くかどうかすらわかりませんが、まぁそれはそれで置いといて、dup2(もしくは、他にもdupとか)で標準入出力を置き換えるのはunixプログラムでよくやる手段なので、覚えておいて損はないと思います。
39
+ これで解決するかどうかわかりませんが、というか自分で試していないので動くかどうかすらわかりませんが、まぁそれはそれで置いといて、dup2(もしくは、他にもdupとか)で標準入出力を置き換えるのはunixプログラムでよくやる手段なので、覚えておいて損はないと思います。
40
+
41
+ ---
42
+
43
+ > あと、dup2(fd,1)ではないですか。
44
+
45
+ 0で間違いないですよ。
46
+ 以下のようなプログラムで確認しました。
47
+
48
+ ```c
49
+ #include <stdio.h>
50
+ #include <sys/types.h>
51
+ #include <sys/stat.h>
52
+ #include <fcntl.h>
53
+ #include <unistd.h>
54
+
55
+ int main()
56
+ {
57
+ int fd;
58
+
59
+ fd = open("test01.c", O_RDONLY);
60
+ dup2(fd, 0);
61
+ execlp("cat", "cat", NULL);
62
+ }
63
+ ```