기본 장치에 액세스하지 않고 두 장치 파일이 C로 동일한 지 확인하고 싶습니다.C에서 두 개의 장치 파일이 같은지 확인하는 방법은 무엇입니까?
stat와 lstat를 사용하여이 작업을 수행 할 수 있습니까?
기본 장치에 액세스하지 않고 두 장치 파일이 C로 동일한 지 확인하고 싶습니다.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'에서 장치 번호를가집니다. 맨 페이지를 참조하십시오. – PSkocik