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로 바꿔주는것 같네요
아 옵션을 리다이렉션 뒤에 붙이는 경우두 있군요~ 역시 무식하면 고생
아 옵션을 리다이렉션 뒤에 붙이는 경우두 있군요~
역시 무식하면 고생한다더니 ㅜ.ㅜ
답변해주셔서 감사합니다.
좋은 주말 되세요
댓글 달기