Portál AbcLinuxu, 13. května 2025 23:08
/dev/sda1
atd./dev
?/dev/block/
jsou odpovídají symlinky, ale dá se na tohle spolehnout, že to tak bude i na jiných linuxových strojích? Odpovídá to POSIXu?stat
em zjišťovat, který device odpovídá?
Řešení dotazu:
major/minor number to device path translate
O /dev/block/
se stará udev, tak by to snad na Linuxových strojích s jádrem 2.6 neměl být problém.
$ vim /etc/udev/rules.d/50-udev.rules SUBSYSTEM=="block", SYMLINK+="block/%M:%m"
Jestli se nepletu, tak v POSIX žádná zmíňka o /dev/block
není IEEE Std 1003.1, 2004 Edition, ISO/IEC 9945.
/dev
u stat
em.
string device_from_number(unsigned int major, unsigned int minor)
{
const string devdir = "/dev/";
const string devblockdir = "/dev/block/";
stringstream ss;
string result = "";
ss << major << ':' << minor << flush;
if (file_exists(devblockdir))
{
if (!dir_empty(devblockdir))
{
if (file_exists(devblockdir+ss.str())) result = devblockdir+ss.str();
} else goto fallback;
} else
{
fallback:
DIR* dir;
dirent* ent;
dir = opendir(devdir.c_str());
if (dir)
{
while (ent = readdir(dir))
{
struct stat finfo;
string fn = devdir + ent->d_name;
if (!stat(fn.c_str(), &finfo))
{
if (S_ISBLK(finfo.st_mode) && (makedev(major, minor) == finfo.st_rdev))
{
result = fn;
break;
}
}
}
} else
{
ohshiT(errno, ERR_OPENING_DIR, "Could not open directory: '"+devdir+"'");
}
closedir(dir);
}
return result;
}
(Toho makra dole si nevšímejte, tím vyhazuju exceptions)
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.