2017-10-26 3 views

답변

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이 귀하의 케이스에서 작동해야합니다.

관련 문제