shell 소스중 redirection 구현 부분인데...
글쓴이: nan392 / 작성시간: 금, 2004/07/30 - 4:54오후
int redirect_in(char ** myArgv) {
int i;
int fd;
/* search forward for < */
for (i = 0; myArgv[i] != NULL; i++) {
if (!strcmp(myArgv[i], "<")) {
break;
}
}
if (myArgv[i]) { /* found "<" in vector. */
if (!myArgv[i+1]) { /* File for redirection has not been provided*/
errno = EINVAL;
return -1;
} else { /* Open file. */
if ((fd =open(myArgv[i+1],O_RDONLY)) == -1) {
perror(myArgv[i+1]);
return -1;
}
}
dup2(fd,STDIN_FILENO); /* Redirect to use it for input. */
close(fd);
for (i = i + 2; myArgv[i] != NULL; i++) { /* close up the vector */
myArgv[i-2] = myArgv[i];
}
myArgv[i-2] = NULL; /* NULL pointer at end */
}
return 0;
}
위의 코드 중에서 dup2를 사용해서 File descriptor를 변경해주는 것까진
이해가 되는데, 그후 나오는 for문의 의미를 잘 모르겠습니다.(/*close up the vector */라는 주석이 있는데도 불구하고.. :cry: )
ls -al > a.txt 라는 argument를 처리 할때 등의 예를 들어서
설명해주시면 감사하겠습니다.
Forums:


myArgv가 aaa < bbb.txt -a -b 이렇다면맨
myArgv가 aaa < bbb.txt -a -b 이렇다면
맨 밑의 for loop는 aaa -a -b로 바꿔주는것 같네요
아 옵션을 리다이렉션 뒤에 붙이는 경우두 있군요~ 역시 무식하면 고생
아 옵션을 리다이렉션 뒤에 붙이는 경우두 있군요~
역시 무식하면 고생한다더니 ㅜ.ㅜ
답변해주셔서 감사합니다.
좋은 주말 되세요
댓글 달기