在 C 程序中打开套接字后,我运行fstat
它并打印出主要和次要设备号。我的主编号为 0,次编号为 8。查看Linux 内核文档,我看到主设备号 0 是为“未命名设备”保留的。
那么,这是Linux的保证吗?也就是说,套接字将始终位于主设备号 0 上吗?如果是这样,小数 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;
}