파일 설명자에서 FILE 포인터를 얻는 방법은 무엇입니까?


85

mkstemp()파일 설명자를 제공하는을 가지고 놀았 지만을 통해 형식이 지정된 출력을 생성하고 싶습니다 fprintf(). 에서 제공하는 파일 설명자를와 함께 사용하기에 적합한 구조 mkstemp()로 쉽게 변환 할 수있는 방법 FILE *fprintf()있습니까?


답변:


101

사용 fdopen():

FILE* fp = fdopen(fd, "w");

34
그리고 파일 * 사용에서 파일 기술자 얻을 fileno(): linux.die.net/man/3/fileno
리 Netherton

2
fd일부 플래그 (예 :)로 열린 경우 새 플래그 로 열린 O_NONBLOCK후에는 어떻게 fdopen됩니까? 그들은됩니까 xor함께 -ed 또는 치환?
xealits 2015

5
@jww : 파일 설명자는 처음부터 ANSI C가 아닙니다.
Rufflewind

2
fdopen여러 번 전화 하는 것이 나쁜 가요? (가정이 또 다시 호출되는 일부 함수 내에서 발생)
phil294

2
@xealits FILE *에 대한 옵션은 이미 열려있는 파일 설명 자의 범위 내에 있어야합니다. 따라서 읽기 전용으로 fd를 열고 쓰기 전용으로 FILE *을 연 경우 예외가 발생해야합니다. 자세한 정보는 ibm.com/support/knowledgecenter/en/SSLTBW_2.2.0/…를
Tjad Clark

28

FILE* f = fdopen(d, "w");

man fdopen 출력 :

개요

#include <stdio.h>

FILE *
fdopen(int fildes, const char *mode);

fdopen()함수는 스트림을 기존 파일 설명자인 fildes. 스트림의 모드는 파일 설명 자의 모드와 호환되어야합니다. 를 통해 스트림이 닫히면 fclose(3), fildes도 닫힙니다.


1
ANSI C에서는 사용할 수 없습니다.
jww

자세한 내용은 다음을 참조하십시오. ibm.com/support/knowledgecenter/en/SSLTBW_2.2.0/…
Tjad Clark

-8

C 표준이 파일 설명자에 대해 말할 것이 없기 때문에이를 수행하는 표준 방법 (또는 그 반대)이 없습니다. 귀하의 특정 플랫폼은 그러한 메커니즘을 제공하거나 제공하지 않을 수 있습니다.


17
"표준"이 의미하는 바에 따라 다릅니다. POSIX는 표준입니다.
Richard Pennington

12
문제는 파일 설명자에 관한 것이 었습니다. ;-)
Richard Pennington

11
@Neil> C라는 태그가 붙은 질문은 "C 표준에 대한 진실을 말해줘"를 의미하는 것이 아니라 "C로 코딩하는 중입니다. 실패합니다. 가능 여부와 방법을 알려주세요. "
Gregory Pakosz 2009

8
나는 이것을 수행하는 표준 방법이 없다는 것에 동의하지만 OP의 언급은 mkstemp이 특정 인스턴스에서 비표준 솔루션이 허용된다는 것을 의미합니다. 그러나이 경우 posix태그를 추가 했어야합니다 (그 이후로 추가 된 것으로 보았습니다).
Emerick Rogul

9
@Neil, 그리고 인터넷의 목적과 삶의 의미. 당신이 다른 의견을 가지고 있다고 말하면 더 이해가 될 것입니다. 나는 또한 SO가 표준보다 머리카락을 쪼개는 것에 관한 것이라고 의심합니다. 그리고 그것은 23의 명성에 대응하는 SO-경험을 가진 사람의 능력을 태그에 의존하는 매우 실용적이 아니다
해커 - 마이클 Krelin
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.