Язык C: ошибка: необъявленный 'O_DIRECTORY' и доступ к файлам в каталоге и подкаталоге (без использования opendir ()) - PullRequest
0 голосов
/ 09 декабря 2018

Я хочу просмотреть все подкаталоги и получить все файлы в каталоге и подкаталогах.Я только хочу использовать системный вызов open () и read () для этого (не opendir () или is_dir) бит, я продолжаю получать ошибку

error: ‘O_DIRECTORY’ undeclared (first use in this function)

, хотя я импортировал fcntl.

вот мой код ниже:

#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <fcntl.h>
#include <stdlib.h>
#include<fcntl.h> 
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
extern int errno; 

int main()
{
    int fd;
    if ((fd = open(".", O_DIRECTORY | O_RDONLY)) ==-1)
    {
        printf("error %s\n", strerror(errno));
        return -1;
    }
    return 0;
}

Кроме того, как можно использовать системный вызов read (), чтобы проверить, читаю ли я файл или подкаталог?(как я уже упоминал, я хочу просмотреть файлы во всех подкаталогах) Я знаю, что is_dir делает это, но я ищу способ сделать это без его использования.Любая помощь будет оценена.

1 Ответ

0 голосов
/ 09 декабря 2018

Цитирование священного писания :

Флаги O_CLOEXEC, O_DIRECTORY и O_NOFOLLOW не указаны в POSIX.1-2001, но указаныв POSIX.1-2008.Начиная с glibc 2.12, их определения можно получить, определив либо _POSIX_C_SOURCE со значением, большим или равным 200809L, либо _XOPEN_SOURCE со значением, большим или равным 700.В glibc 2.11 и более ранних версиях определения можно получить, определив _GNU_SOURCE.


Попробуйте скомпилировать с помощью -D_POSIX_C_SOURCE=200809L или добавить #define _POSIX_C_SOURCE 200809L перед включением любых заголовков.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...