Как я могу проверить, является ли это путь к каталогу или любой путь к имени файла?

Этим

Почему fopen("any_path_name",'r') не выдает NULL в качестве возврата?

я узнаю, что в Linux каталоги и файлы считаются файлами. поэтому, когда я даю какой-либо путь к каталогу или путь к файлу в fopen с режимом чтения, он не дает дескриптор файла NULL и?

так как я могу проверить, является ли это путь к каталогу или путь к файлу? если я получаю какой-то путь из аргумента команды?

3 ответа

Решение

man 2 stat:

NAME
     fstat, fstat64, lstat, lstat64, stat, stat64 -- get file status

...

     struct stat {
         dev_t           st_dev;           /* ID of device containing file */
         mode_t          st_mode;          /* Mode of file (see below) */

...

     The status information word st_mode has the following bits:

...

     #define        S_IFDIR  0040000  /* directory */

Спасибо zed_0xff и лгору оксу

это можно проверить с помощью этого примера кода

#include<stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
int main()
{
struct stat statbuf;

FILE *fb = fopen("/home/jeegar/","r");
if(fb==NULL)
    printf("its null\n");
else
    printf("not null\n");

stat("/home/jeegar/", &statbuf);

if(S_ISDIR(statbuf.st_mode))
    printf("directory\n");
else
    printf("file\n");
return 0;
}

вывод

its null
directory

Ты можешь использовать S_ISDIR макрос.

Другие вопросы по тегам