STDIN_FILENO와 STDIN_FILENO의 차이점은 무엇입니까?
실제적인 차이는 무엇입니까?stdin
그리고.STDIN_FILENO
C로요?
인터페이스모두가 말했듯이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
'programing' 카테고리의 다른 글
Vue.js 컴포넌트 내의 모멘트 라이브러리를 사용하는 방법 (0) | 2022.06.13 |
---|---|
리눅스에서 데몬 생성 (0) | 2022.06.13 |
Java 기본 생성자 (0) | 2022.06.13 |
이 Nuxt-Socket-io 이미터는 왜 그 액션을 트리거하지 않는가? (0) | 2022.06.13 |
Import Library는 어떻게 작동합니까?상세 정보? (0) | 2022.06.13 |