파일 리다이렉트에 관한 문제.. freopen(......)
글쓴이: fanta420 / 작성시간: 목, 2003/11/06 - 6:00오전
안녕하세요?
쉘프로그램 구현중에 리다이렉트 관련부분에 문제가 있어 문의 드립니다.
#include <stdio.h> main() { if(freopen("lstest.txt", "w", stdout) == NULL) fprintf(stderr, "error redirecting stdoutn"); execl("/bin/ls","ls"); fclose(stdout); }
execl 대신에 printf() 문을 사용하면 그 printf()에 쓴 문장은 lstest.txt 파일에 잘 생성이 되는데
execl 문으로 하면 ls 의 결과가 lstest.txt 에 생성이 안되네요...
어디 잘못된 곳이 있나요???
execl 문의 결과도 stdout 으로 출력이 되는게 아닌가요???
Forums:
두가지가 잘못된 코드입니다.하나는, 사용법 오류이고, 하나는 st
두가지가 잘못된 코드입니다.
하나는, 사용법 오류이고, 하나는 stdout에 대한 오해입니다.
사용법오류라는 것은 execl 에 있는데,
execl의 가변인자 마지막은 항상 NULL 로 끝나야합니다.
stdout 에 대한 오해는, stdout과 filedescriptor 1 을 구별하지 않고 사용한 것인데,
원하는 동작은 lstest.txt라는 파일이 기술자 번호 1 로 열릴 때만 가능한 것입니다.
하지만, freopen이 그것을 보장해 주진않습니다.
물론, freopen은 stdout 의 기술자인 1 번을 먼저 닫을 것이고, 다음 열리는 open으로 그 번호를 다시 할당할 것이 분명하기 때문에, 우려하는 바는 대개 일어나지 않습니다.
원하는 동작을 제대로 하려면, 아래와 같이 하는 것이 오히려 나아 보이는 군요.
---
http://coolengineer.com
댓글 달기