2017-10-26 15 views

答えて

2

2つのデバイスファイルが同じであるかどうかを確認するには、それぞれにstatを呼び出し、それらが同じタイプのデバイス(ブロックまたは文字)であり、メンバーが等しいことを確認します。

#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はあなたのケースで動作するはずです。

関連する問題