freopen함수에 대한 설명(리눅스, 표준 c라이브러리이기도 함)좀 이해시켜주세요(책에 나와있는).
FILE *freopen(const char *restrict pathname, const char *restrict type, FILE *restrict fp); <- freopen 함수 정의.
FILE 객체는 곧 스트림을 뜻하는 것이고...
책에는 이렇게 설명이 되어있는데 대체 뭔말인지 모르겠습니다.
2.freopen 함수는 지정된 파일을 지정된 스트림으로 연다. 스트림이 이미 열려 있으면 닫은 후 다시 연다. 스트림에 지향이 설정되어 있으면 freopen은 그 지향을 지운다. 이 함수는 지정된 파일을 미리 정의된 스트림(표준 입력, 표준 출력, 표준 오류)중 하나로 여는 데 주로 쓰인다.
c라이브러리인지라 김XX씨의 홈페이지(주소를 공개해도 되는지 몰라서 조심스럽습니다...)로 가서 레퍼런스를 보니까 원래 fp(3번째 인수)를 스트림으로 갖는 파일을 1번째 인수로 된 파일로 변경한다.(즉 변경 후 파일에 대해 쓰면 3번째 인수 파일이 아닌 1번째 인수 파일로 써진다.)라고 되어있네요... 근데 위의 설명은... 마치 1번째 인수가 파일이고 3번째 인수가 스트림 즉 1번째 인수 파일을 3번째 인수 스트림으로 연다라는 식으로 설명되어있어 이해도 안되고...(스트림하고 파일은 밀접하게 연관되어 있어 파일이 바뀌면 스트림도 바뀌고 스트림이 바뀌면 파일도 바뀌는 거 아닌가요???)그러네요 2. 번 좀 이해하기 쉽게 풀어 써주세요 부연 설명도 부탁드리고요.
답변이 없네요...
크게 중요한 부분 아니면 그냥 넘어가는 것도 한 방법일 듯 한데 한번 더 글을 노출시켜보겠습니다.
음 ..
freopen 은 fclose + fopen 과 같다고 보면 됩니다.
파일을 새로운 mode 로 다시 열거나 할 때 사용하면 되는데, 잘 쓰이지는 않습니다.
주로 stdin, stdout, stderr 같이 잘 알려진 파일 스트림을 컨트롤 할 때 쓰이죠.
예를 들어 daemonize 할 때, close 로 stdio 에 해당하는 fd 를 모두 닫아 주는데..
freopen("/dev/null", "w", stdout); 처럼 stdin, stdout, stderr 를 직접 지명해도 됩니다.
이 코드는 stdout 로 나가는 출력을 /dev/null 로 날리지만..
만약 /dev/null 대신 특정 파일명을 지정하면.. 그 파일에 모든 stdout 출력이 저장되겠죠. (stream redirect)
되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』
아 이해 되었습니다.
답변 감사합니다.
freopen("/tmp/log.txt", "w",
file/socket descriptor 는 커널 내부로 진입했을 때만 의미를 가지는 단순한 숫자입니다.
답변 감사합니다.
답변 감사합니다.
그렇땐 이렇게
함수라는 것은 프로그램을 편하게 하는 부분이기도 하지만 때로는 이해가 안 가기도 합니다.
첨에 이렇게 올려 와져 있는
FILE *freopen(const char *restrict pathname, const char *restrict type, FILE *restrict fp); <- freopen 함수 정의.
요렇게 그냥 보면 어렵습니다.
이 형식을 쉽게 풀어 보겠습니다.
FILE *freopen(const char *path, const char *mode, FILE *fp); 로 표현이 됩니다.
예제로 써 보겠습니다.
FILE *freopen(./wow.ph, r+, NULL)
여기서 두번째 항목 r+ 는 fdopen 의 mode 인자 값입니다.
리눅스 파일을 보면 -rwxrwxr-x 이런식으로 있는 부분이 있습니다.
파일 권한을 주는 부분인데 파일을 읽고 쓰기 위해서 권한을 주는 부분입니다.
세번째 인자값은 성공시 반환값은 파일 포인터 이고 오류시 반환값은 NULL 입니다.
2번은 이런 의미 입니다. 조건이라고 보면 되는데 한글 파일을 예로 들면 이미 열려 있는 파일을 다시 열려고 하면 저장하시겠습니까 라는
메시지가 뜹니다. 이런식으로 생각하시면 스트림을 통해 상태를 볼수 있는 도태로 쓸수 있습니다.
내가 파일을 저장하고자 한다. 파일명이 중복이다. 그렇다면 새로운 파일명으로 저장하실것이냐? 아니면 덮어 쓰실래요?
요런 느낌입니다.
그렇군요...
추가적인 설명 감사합니다.
댓글 달기