문제

소켓이 생성되거나 C에서 파일이 열리거나 생성될 때 소켓/파일에 할당된 파일 설명자가 사용 가능한 가장 낮은 값의 설명자가 되도록 보장됩니까?이와 관련하여 C 사양에서는 파일 설명자 할당에 대해 무엇을 말합니까?

도움이 되었습니까?

해결책

최저가 보장되지 않으며 구현에 따라 다릅니다. (1).그러나 일반적으로 열린 파일 설명자를 할당하는 루틴은 첫 번째 열기를 제공하는 방법을 사용합니다.여러 개의 낮은 항목이 무료로 제공되는 직후에 예상보다 높은 설명자가 남을 수도 있습니다.

하지만 내가 이것을 알 수 있다고 생각할 수 있는 유일한 이유는 확인해야 할 가장 높은 파일 설명자를 전달하면 속도가 빨라지는 선택 기능 때문입니다.

(1) IEEE 표준을 따르는 구현은 파일에 대해 사용되지 않는 가장 낮은 설명자를 보장하지만 이는 소켓에는 적용되지 않을 수 있습니다.모든 구현이 open()에 대한 IEEE 표준을 따르는 것은 아니므로 이식 가능한 소프트웨어를 작성하는 경우에는 이에 의존하지 않는 것이 가장 좋습니다.

다른 팁

나는 C 사양에서 그것을 찾을 수 없을 것이라고 생각합니다. 아마도 OS 사양 일 가능성이 높습니다.Linux에서의 내 경험은 항상 가장 낮았다는 것입니다.

나는 이에 대해 또 다른 질문으로 답하겠습니다. 이것이 왜 중요한가요?파일 설명자를 다른 것과 비교하거나(stdin/stdout/stderr을 확인하지 않는 한) 수학을 수행해서는 안 됩니다.그것이 int에 맞는 한 (그리고 그것이 보장되는 한) 그것이 당신이 정말로 알아야 할 전부입니다.

스티브 M이 옳습니다.C에는 소켓 개념이 없으며 해당 파일 I/O 기능은 설명자가 아닌 FILE 개체에 대한 [포인터]를 사용합니다.

@aib open(), close(), lseek(), read(), write()는 모두 파일 설명자를 사용합니다.나는 I/O에 스트림을 거의 사용하지 않습니다.

@Kyle select()와 같은 문 때문에 중요합니다.가장 높은 설명자를 알면 성능이 향상될 수 있습니다.

C 사양에서는 구현에 따라 다르다고 나와 있습니다.Unix 구현을 보고 있다면 open(2) 매뉴얼 페이지에 "성공적인 호출에 의해 반환된 파일 설명자는 현재 프로세스에 열려 있지 않은 가장 낮은 번호의 파일 설명자가 될 것입니다."라고 나와 있습니다.

이는 특정 파일을 특정 설명자에 첨부하려는 경우에 도움이 됩니다.stderr를 /dev/null로 리디렉션하고 싶다고 가정해 보겠습니다.같은 것

닫기(2);open("/dev/null", O_WRONLY);

그것을 해야 합니다.물론 open으로 반환된 fd를 캡처하여 2인지 확인해야 합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top