Есть файлы, на которые установлены права ACL. Требуется для каждого узнать группу владельца, но stat в некоторых случаях возвращает вместо идентификатора гигантское число (подозреваю что-то отрицательное вернулось). Попробывал применить QFileInfo то-же самое, причем в дургих случая, то есть иногда и stat и QFileInfo правильно определяют, иногда кто-то один, иногда никто из них. При этом команды getfacl и ls -l показывают все привильно. С чем это может быть связано и как можно решить проблему (кроме как парсить вывод getfacl или ls -l).
Не получается получить идентификатор группы владельца файла
тестовый код, его вывод и вывод ls -l/getfacl/stat'а в студию...
ну и на всякий пожарный, что за ФС и версию ядра...
тестовый код, его вывод и вывод ls -l/getfacl/stat'а в студию...
ну и на всякий пожарный, что за ФС и версию ядра...
struct stat statv;
QFileInfo fileInfo("/opt/crvsis/bin/pg_ctl");
stat(fileName.toUtf8(),&statv);
qDebug()<<"group=\t"<<fileInfo.groupId()<<"\t"<<statv.st_gid;
group= 4294967294 3061326235
ls -l /opt/crvsis/bin/pg_ctl
-rwxrwx---+ 1 terminus acl1 39425 февр. 11 22:05 /opt/crvsis/bin/pg_ctl
getfacl /opt/crvsis/bin/pg_ctl
getfacl: Removing leading '/' from absolute path names
# file: opt/crvsis/bin/pg_ctl
# owner: terminus
# group: acl1
user::rwx
group::rwx
group:acl0:r-x
mask::rwx
other::---
uname -a
Linux linux-epnd 3.1.0-1.2-desktop #1 SMP PREEMPT Thu Nov 3 14:45:45 UTC 2011 (187dde0) i686 i686 i386 GNU/Linux
gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/i586-suse-linux/4.6/lto-wrapper
Target: i586-suse-linux
Configured with: ../configure --prefix=/usr --infodir=/usr/share/info --mandir=/usr/share/man --libdir=/usr/lib --libexecdir=/usr/lib --enable-languages=c,c++,objc,fortran,obj-c++,java,ada --enable-checking=release --with-gxx-include-dir=/usr/include/c++/4.6 --enable-ssp --disable-libssp --disable-plugin --with-bugurl=http://bugs.opensuse.org/ --with-pkgversion='SUSE Linux' --disable-libgcj --disable-libmudflap --with-slibdir=/lib --with-system-zlib --enable-__cxa_atexit --enable-libstdcxx-allocator=new --disable-libstdcxx-pch --enable-version-specific-runtime-libs --program-suffix=-4.6 --enable-linux-futex --without-system-libunwind --with-arch-32=i586 --with-tune=generic --build=i586-suse-linux
Thread model: posix
gcc version 4.6.2 (SUSE Linux)
Файловая система Ext4
А возвращаемое значение stat() проверять будет Пушкин (см. man 2 stat)?
да, код stat'а посмотреть надо...
если с ним всё в порядке, то распечатай прочую инфу из структуры...
On Windows and on systems where files do not have groups this function always returns (uint) -2.
QFileInfo::groupId() возвращает свой код ошибки...
тоже самое он возвращает, если stat провалился...
К слову, (uint)-2 -- это как раз 0xfffffffe или 4294967294.
А возвращаемое значение stat() проверять будет Пушкин (см. man 2 stat)?
да, тупанул. проверил errno говорит "нет такого файла или каталога". Удивительно, файл на месте.
Разобрался, оказывается там действительно с файликами проблема была. Всем большое спасибо.