:없는 것처럼 첫 번째의 printf없이표준 입출력 다음 프로그램에서 첫 번째의 printf 문은 그 이후의 행동을 변경하는 것이 왜 주석을 내가 궁금
#include <unistd.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
int main() {
//printf("hi from C \n");
// Close underlying file descriptor:
close(STDOUT_FILENO);
if (write(STDOUT_FILENO, "Direct write\n", 13) != 13) // immediate error detected.
fprintf(stderr, "Error on write after close(STDOUT_FILENO): %s\n", strerror(errno));
// printf() calls continue fine, ferror(stdout) = 0 (but no write to terminal):
int rtn;
if ((rtn = printf("printf after close(STDOUT_FILENO)\n")) < 0 || ferror(stdout))
fprintf(stderr, "Error on printf after close(STDOUT_FILENO)\n");
fprintf(stderr, "printf returned %d\n", rtn);
// Only on fflush is error detected:
if (fflush(stdout) || ferror(stdout))
fprintf(stderr, "Error on fflush(stdout): %s\n", strerror(errno));
}
, 이후의 printf rtns (34) stdout 사용자 버퍼에서 기본 fd 로의 연결이 닫혔더라도 오류가 발생했습니다. 수동 fflush (stdout)에서만 오류가 다시보고됩니다. 하지만 첫 번째 printf가 켜져 있으면 다음 printf는 내가 예상 한대로 오류를보고합니다. 물론 두 경우 모두 STDOUT_FILENO fd가 닫힌 후에는 아무 것도 (printf에 의해) 터미널에 기록되지 않습니다.
처음에는 close(STDOUT_FILENO)
에 어리 석다는 것을 알고 있습니다. 이것은 내가 우연히 마주 쳤던 실험이고이 분야에 대해 더 잘 알고있는 누군가가 우리에게 그것에 대해 유익한 것을 볼 수 있다고 생각합니다 ..
저는 gcc를 사용하여 Linux를 사용하고 있습니다. 다음은 터미널의 경우 -
기본 디스크립터 'STDOUT_FILENO'를 닫을 때'stdout' 상태가 잘못되었습니다.'fclose (stdout)'로 올바르게 작동합니다. –