LinuxForum.Fans
Тема

Не получается получить идентификатор группы владельца файла

Автор: kryuch 8 сообщений 2017 просмотров
#302356

Есть файлы, на которые установлены права ACL. Требуется для каждого узнать группу владельца, но stat в некоторых случаях возвращает вместо идентификатора гигантское число (подозреваю что-то отрицательное вернулось). Попробывал применить QFileInfo то-же самое, причем в дургих случая, то есть иногда и stat и QFileInfo правильно определяют, иногда кто-то один, иногда никто из них. При этом команды getfacl и ls -l показывают все привильно. С чем это может быть связано и как можно решить проблему (кроме как парсить вывод getfacl или ls -l).

#302442

тестовый код, его вывод и вывод ls -l/getfacl/stat'а в студию...

ну и на всякий пожарный, что за ФС и версию ядра...

#302505
Fat-Zer написал:
тестовый код, его вывод и вывод ls -l/getfacl/stat'а в студию...

ну и на всякий пожарный, что за ФС и версию ядра...
text

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

text

ls -l /opt/crvsis/bin/pg_ctl

-rwxrwx---+ 1 terminus acl1 39425 февр. 11 22:05 /opt/crvsis/bin/pg_ctl

text

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::---

text

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

text

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

#302513

А возвращаемое значение stat() проверять будет Пушкин (см. man 2 stat)?

#302569

да, код stat'а посмотреть надо...
если с ним всё в порядке, то распечатай прочую инфу из структуры...

On Windows and on systems where files do not have groups this function always returns (uint) -2.

QFileInfo::groupId() возвращает свой код ошибки...
тоже самое он возвращает, если stat провалился...

#302572

К слову, (uint)-2 -- это как раз 0xfffffffe или 4294967294.

#302576
bormant написал:
А возвращаемое значение stat() проверять будет Пушкин (см. man 2 stat)?

да, тупанул. проверил errno говорит "нет такого файла или каталога". Удивительно, файл на месте.

#302606

Разобрался, оказывается там действительно с файликами проблема была. Всем большое спасибо.

Войдите или зарегистрируйтесь, чтобы ответить.