C 프로그램에서 소켓을 연 후 fstat
이를 실행하면 주요 장치 번호와 보조 장치 번호가 인쇄됩니다. 내 메이저 번호는 0이고 마이너 번호는 8입니다. 확인하다리눅스 커널 문서, 주요 장치 번호 0이 "이름이 지정되지 않은 장치"용으로 예약되어 있는 것을 확인했습니다.
그렇다면 이것이 Linux에 대한 보장입니까? 즉, 소켓은 항상 주 번호 0에 있습니까? 그렇다면 10진수 8도 보장되나요? 헤더에 이러한 값을 정의하는 매크로가 있나요?
이것은 내 코드입니다.
#include <stdio.h>
#include <unistd.h>
#include <sys/socket.h>
#include <sys/stat.h>
#include <sys/sysmacros.h>
#include <sys/types.h>
int main() {
int ret = 0, sock;
struct stat fs;
sock = socket(AF_INET, SOCK_STREAM, 0);
if ( sock < 0 ) {
perror("socket");
return 1;
}
if ( fstat(sock, &fs) != 0 ) {
perror("fstat");
ret = 1;
}
else {
printf("Socket is on device %u:%u\n", major(fs.st_dev), minor(fs.st_dev));
}
close(sock);
return ret;
}