Как я могу проверить, является ли это путь к каталогу или какой-либо путь к имени файла? - PullRequest
4 голосов
/ 08 декабря 2011

этим

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

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

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

Ответы [ 3 ]

6 голосов
/ 08 декабря 2011

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 */
2 голосов
/ 08 декабря 2011

спасибо zed_0xff и lgor Oks

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

#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
2 голосов
/ 08 декабря 2011

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

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