回答編集履歴

2

例文の変更

2018/11/05 00:19

投稿

katsuko
katsuko

スコア3462

test CHANGED
@@ -118,7 +118,13 @@
118
118
 
119
119
  dup2(fd, 0);
120
120
 
121
+ // これでもいいと思うが、
122
+
121
- execlp("cat", "cat", NULL);
123
+ //execlp("cat", "cat", NULL);
124
+
125
+ // こちらのほうがわかりやすいかと。
126
+
127
+ execlp("sed", "sed", "-e", "s/test01/aaaa01/", NULL);
122
128
 
123
129
  }
124
130
 

1

コメントに対する返答

2018/11/05 00:19

投稿

katsuko
katsuko

スコア3462

test CHANGED
@@ -75,3 +75,51 @@
75
75
 
76
76
 
77
77
  これで解決するかどうかわかりませんが、というか自分で試していないので動くかどうかすらわかりませんが、まぁそれはそれで置いといて、dup2(もしくは、他にもdupとか)で標準入出力を置き換えるのはunixプログラムでよくやる手段なので、覚えておいて損はないと思います。
78
+
79
+
80
+
81
+ ---
82
+
83
+
84
+
85
+ > あと、dup2(fd,1)ではないですか。
86
+
87
+
88
+
89
+ 0で間違いないですよ。
90
+
91
+ 以下のようなプログラムで確認しました。
92
+
93
+
94
+
95
+ ```c
96
+
97
+ #include <stdio.h>
98
+
99
+ #include <sys/types.h>
100
+
101
+ #include <sys/stat.h>
102
+
103
+ #include <fcntl.h>
104
+
105
+ #include <unistd.h>
106
+
107
+
108
+
109
+ int main()
110
+
111
+ {
112
+
113
+ int fd;
114
+
115
+
116
+
117
+ fd = open("test01.c", O_RDONLY);
118
+
119
+ dup2(fd, 0);
120
+
121
+ execlp("cat", "cat", NULL);
122
+
123
+ }
124
+
125
+ ```