programing

STDIN_FILENO와 STDIN_FILENO의 차이점은 무엇입니까?

prostudy 2022. 6. 13. 22:23
반응형

STDIN_FILENO와 STDIN_FILENO의 차이점은 무엇입니까?

실제적인 차이는 무엇입니까?stdin그리고.STDIN_FILENOC로요?

인터페이스모두가 말했듯이stdin는 입니다.FILE *표준 c 라이브러리에 정의되어 있습니다.다음과 같은 상위 수준의 인터페이스를 사용할 수 있습니다.fread,fwrite,그리고.fprintf반면에STDIN_FILENO는 파일 기술자일 뿐입니다(거의 확실히 0).여기에는 다음과 같은 하위 수준의 인터페이스가 사용됩니다.read그리고.write.

stdin는, 다름 아닌 표준 인으로부터의 입력을 취득하기 위해서 사용되는 디폴트 FILE 포인터입니다.

STDIN_FILENO는 기본 표준 입력 파일 기술자 번호입니다.0이는 기본적으로 일반적인 사용을 위한 정의된 지침입니다.

부터,

/* Standard streams.  */
extern struct _IO_FILE *stdin;          /* Standard input stream.  */
extern struct _IO_FILE *stdout;         /* Standard output stream.  */
extern struct _IO_FILE *stderr;         /* Standard error output stream.  */
/* C89/C99 say they're macros.  Make them happy.  */
#define stdin stdin
#define stdout stdout
#define stderr stderr

송신원

/* Standard file descriptors.  */
#define STDIN_FILENO    0       /* Standard input.  */
#define STDOUT_FILENO   1       /* Standard output.  */
#define STDERR_FILENO   2       /* Standard error output.  */

예스stdin(_IO_FILE에서 정의)./usr/include/libio.h)는 구조 데이터입니다. STDIN_FILENO는 커널에서 사용되는 파일 기술자를 가리키는 매크로 상수입니다.

#include <stdio.h>
#include <unistd.h>

void
stdin_VS_STDIN_FILENO(void)
{
    printf("stdin->_flags = %hd\n", stdin->_flags);
    printf("STDIN_FILENO  : %d\n", STDIN_FILENO);
}

int
main(void)
{
    stdin_VS_STDIN_FILENO();
    return 0;
}

stdin : 1. 파일 포인터(*FILE) 2.파일 기술자 테이블은 프로세스가 생성될 때 해당 주소를 유지합니다. 3. /usr/include/stdio.h에 있습니다.

STDIN_FILENO : 1.매크로 2입니다.파일 기술자 테이블(기본값 0)의 배열 인덱스일 뿐입니다. 3. /usr/include/unistd.h에 있습니다.

코드를 따라가면 더 명확해질 수 있습니다.

#include<stdio.h> 
#include<unistd.h> 
int main() 
{    
     printf("%d\t\t%p ----- ",STDIN_FILENO,stdin);

return 0; 
} 

Linux 헤더 #의 STDIN_FILENO에는 "unistd"가 포함되어 있습니다.h"는 Linux 파이프를 사용하는 경우 파이프의 stdin을 나타내는0 의 매크로입니다.

언급URL : https://stackoverflow.com/questions/15102992/what-is-the-difference-between-stdin-and-stdin-fileno

반응형