Я могу проверить биты прав доступа к файлу с помощью системного вызова stat()
, который возвращает структуру, содержащую поле, которое, в свою очередь, содержит тип и режим файла. Есть ли способ сделать то же самое, используя только системные вызовы open
и read
? т.е. анализируя каждый бит? Например, следующий код читает файл (первые четыре байта) и определяет, является ли он файлом ELF или нет.
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
#include <fcntl.h>
int main(int argc, char *argv[])
{
int fd = open("main", O_RDONLY);
char *buf = malloc(sizeof (char) * 4);
read (fd, buf, 4);
if (strcmp(buf, "ELF"))
printf("It is an ELF file.\n");
free(buf);
return 0;
}
Есть ли аналогичный способ чтения файла для побитового извлечения информации?
Права доступа к файлу являются не частью содержимого файла, а частью его записи в каталоге, поэтому вы не можете прочитать разрешения, используя open
или read
для файла.
Использование stat
— правильный способ сделать это.
@debdut Возможно, вы сможете это сделать, если попытаетесь прочитать каталог как файл, но вы получите те же значения, что и из stat
, и процесс будет зависеть от файловой системы. Почему вы хотите сделать это таким образом?
Такой осмотр помогает мне понять концепцию. Это только для целей обучения.
Я видел, что вы упомянули в другом комментарии, что делаете это только в учебных целях. Кто-нибудь еще читает это для производственной работы... НЕ ДЕЛАЙТЕ. Это будет непереносимо! Вы, вероятно, просто хотите использовать stat
в содержащем каталоге.
Вы захотите взглянуть на определение вашей системы функции stat
. Вот один из примеров реализации функции статистики. Это определенно не так просто, как просто вызвать stat
. Но если вы изучите этот источник и пройдёте по ссылкам в нём, вы поймёте, как это работает.
К сожалению, я достаточно здравомыслящий, чтобы не изучать источник, и я не уверен, можно ли это сделать, используя только комбинации open
и read
. Я думаю, что нет, хотя (просто предположение)
Я хочу проверить биты напрямую, т.е. если разрешения являются частью записи Dir, то нет ли способа прочитать это напрямую? Любые полезные ресурсы будут полезны, я не смог их найти.