如何在C语言中检查两个设备文件是否相等?

3
我想在C语言中检查两个设备文件是否相等,而不需要访问底层设备。是否可以使用stat和lstat来实现?

struct stat结构体中的设备号存储在.st_dev字段下。请参考手册。 - Petr Skocik
2个回答

2

要确定两个设备文件是否相同,请对它们中的每一个调用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);
}

1

你是否查看过stat结构?你可以找到文件的大小以及许多其他信息。.st_dev应该适用于你的情况。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接