基本デバイスにアクセスすることなく、2つのデバイスファイルがCで等しいかどうかをチェックしたいと思います。Cで2つのデバイスファイルが等しいかどうかを確認する方法は?
これはstatとlstatを使って行うことができますか?
基本デバイスにアクセスすることなく、2つのデバイスファイルがCで等しいかどうかをチェックしたいと思います。Cで2つのデバイスファイルが等しいかどうかを確認する方法は?
これはstatとlstatを使って行うことができますか?
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);
}
stat
の構造を見ましたか?ファイルのサイズや多くのものを見つけることができます。 .st_dev
はあなたのケースで動作するはずです。
'struct stat'は' .st_dev'の下にデバイス番号を持っています。マンページを参照してください。 – PSkocik