programing

stdout과 STDOUT_FILENO의 차이점

itsource 2022. 7. 21. 20:45
반응형

stdout과 STDOUT_FILENO의 차이점

어떻게 다른지 궁금해서stdout그리고.STDOUT_FILENOLinux C에 있습니다.

몇 가지 조사 끝에 다음과 같은 결론을 도출했다.리뷰하고 틀린 부분이 있으면 고쳐주실 수 있나요?고마워요.

  • stdout표준 C 언어 I/O 스트림에 속하며 유형은 FILE*이며 stdio.h에서 정의됩니다.

  • STDOUT_FILENOint 타입을 가지는 것은, 다음의 URL 로 정의되어 있습니다.unistd.hLinux 시스템의 파일 기술자입니다.unistd.h의 설명은 다음과 같습니다.

The following symbolic constants shall be defined for file streams:

STDERR_FILENO
    File number of stderr; 2.
STDIN_FILENO
    File number of stdin; 0.
STDOUT_FILENO
    File number of stdout; 1.

그래서 제 생각에는STDOUT_FILENO는 시스템 수준의 호출에 속하며 어느 정도 시스템 API와 비슷합니다. STDOUT_FILENO는, 시스템내의 임의의 디바이스를 기술하기 위해서 사용할 수 있습니다.

stdout보다 높은 레벨(사용자 레벨?)에 배치되어 실제로 캡슐화 되어 있습니다.STDOUT_FILENO.stdoutI/O 버퍼가 있습니다.

그것이 그들의 차이에 대한 저의 이해입니다.어떤 코멘트나 정정이라도 감사합니다.

stdout는 입니다.FILE*표준 출력 스트림을 제공합니다.그러니 당연하게도fprintf(stdout, "x=%d\n", x);와 같은 동작을 가지다printf("x=%d\n", x);;사용자는stdout위해서<stdio.h>와 같은 기능fprintf,fputs기타.

STDOUT_FILENO는 정수 파일 기술자(실제로는 정수 1)입니다.다음 기간 동안 사용할 수 있습니다.write시스템

둘의 관계는STDOUT_FILENO == fileno(stdout)

(당신이 이런 이상한 일을 한 후를 제외하고)fclose(stdout);또는 일부freopen조금 있다가fclose(stdin)절대 해서는 안 되는 일!J.F.의 코멘트에 의하면, 이것을 봐 주세요.세바스찬)

평소에는FILE*버퍼링되어 있기 때문에(보통 퍼포먼스가 좋기 때문에).가끔 전화하고 싶을 때가 있어요.fflush버퍼를 플래시합니다.

write(2)같은 syscall에는 파일 기술자 번호를 사용할 수 있습니다(이 번호는stdio또는 poll(2)을 참조해 주세요.하지만 syscalls를 사용하는 것은 엉터리입니다.매우 뛰어난 효율을 얻을 수 있을지는 모르지만(단, 이것은 코드화하기 어렵습니다), 대부분의 경우,stdio라이브러리로 충분합니다(휴대성이 향상됩니다).

(물론, 당신은#include <stdio.h>stdio 함수의 경우,#include <unistd.h>- 및 기타 헤더 - 시스템스콜을 위해writestdio 함수는 syscall로 구현되어 있습니다.fprintf전화할 수 있다write).

언급URL : https://stackoverflow.com/questions/12902627/the-difference-between-stdout-and-stdout-fileno

반응형