소스 검색

What is happening?

themultiplexer 7 년 전
부모
커밋
28bb3b472e
1개의 변경된 파일22개의 추가작업 그리고 27개의 파일을 삭제
  1. 22
    27
      hw7/task2/src/lib.rs

+ 22
- 27
hw7/task2/src/lib.rs 파일 보기

@@ -141,50 +141,45 @@ impl<R: BufRead, W: Write> Shell<R, W> {
141 141
 
142 142
                 let mut commands = cmd.split('|');
143 143
                 let commands_vec: Vec<&str> = commands.collect();
144
+                
145
+                let needs_pipe = commands_vec.len() == 2;
144 146
 
145 147
                 if let Ok((reader, writer)) = pipe() {
146
-                    /*
147
-                    let pid = fork();
148
-                    match pid {
148
+
149
+                    let fi = fork();
150
+                    match fi {
149 151
                         Ok(Parent { .. }) => {
150
-                                //wait();
152
+                            wait();
151 153
                         }
152 154
                         Ok(Child) => {
153
-
155
+                            if let Some(first) = commands_vec.get(0) {
156
+                                if needs_pipe {
157
+                                    close(reader).unwrap();
158
+                                    dup2(writer, 1).unwrap();
159
+                                }
160
+                                self.execute(first);
161
+                            }
154 162
                         }
155
-
156 163
                         Err(_) => println!("Fatal error: Fork failed"),
157 164
                     }
158
-                    */
159 165
 
160
-                    let sub_pid = fork();
161
-                    match sub_pid {
166
+
167
+                    let sec = fork();
168
+                    match sec {
162 169
                         Ok(Parent { .. }) => {
163
-                            if let Some(out) = commands_vec.get(1) {
164
-                                wait();
165
-                                close(writer).unwrap();
166
-                                dup2(reader, 0).unwrap();
167
-                                self.execute(out)
168
-                            } else {
169
-                                wait();
170
-                            }
170
+                            wait();
171 171
                         }
172 172
                         Ok(Child) => {
173
-
174
-                            if let Some(thing) = commands_vec.get(0) {
175
-                                if let Some(_) = commands_vec.get(1) {
176
-                                    close(reader).unwrap();
177
-                                    dup2(writer, 1).unwrap();
178
-                                }
179
-                                self.execute(thing);
173
+                            if let Some(second) = commands_vec.get(1) {
174
+                                close(1).unwrap();
175
+                                close(writer).unwrap();
176
+                                dup2(reader, 0).unwrap();
177
+                                self.execute(second);
180 178
                             }
181 179
                         }
182
-
183 180
                         Err(_) => println!("Fatal error: Fork failed"),
184 181
                     }
185 182
 
186
-
187
-
188 183
                 }
189 184
 
190 185
             },

Loading…
취소
저장