我想在C语言中检查两个设备文件是否相等,而不需要访问底层设备。是否可以使用stat和lstat来实现?
要确定两个设备文件是否相同,请对它们中的每一个调用stat
,并检查它们是否都是相同类型的设备(块设备或字符设备),以及它们的.st_rdev
成员是否相等。
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
int main(int arc, char **argv)
{
struct stat s1, s2;
char *err;
if (stat(argv[1], &s1) < 0) {
err = strerror(errno);
fprintf(stderr, "Can't stat %s: %s\n", argv[1], err);
exit(1);
}
if (stat(argv[2], &s2) < 0) {
err = strerror(errno);
fprintf(stderr, "Can't stat %s: %s\n", argv[2], err);
exit(1);
}
if (S_ISCHR(s1.st_mode) && S_ISCHR(s2.st_mode) && s1.st_rdev == s2.st_rdev) {
printf("Same char device\n");
exit(0);
}
if (S_ISBLK(s1.st_mode) && S_ISBLK(s2.st_mode) && s1.st_rdev == s2.st_rdev) {
printf("Same block device\n");
exit(0);
}
printf("devices do not match\n");
exit(1);
}
你是否查看过stat
结构?你可以找到文件的大小以及许多其他信息。.st_dev
应该适用于你的情况。
struct stat
结构体中的设备号存储在.st_dev
字段下。请参考手册。 - Petr Skocik