C open()目录没有错误

  • 本文关键字:有错误 open fcntl
  • 更新时间 :
  • 英文 :


我有一个函数,用标准的open()et read()函数打开文件,然后读取这些文件。我使用errno变量来处理所有可能的错误,例如权限被拒绝或没有这样的文件或目录,但当我在目录上使用open时,它不会返回错误,它只是打开它并尝试读取它。那么,当我打开一个目录时,如何才能得到错误消息呢?

目录也是一个文件(就Unix/Linux而言)。所以一般情况下你不会出错。您可以使用stat或fstat函数来跟踪普通或特殊文件。

当您使用stat或fstat时,您需要声明一个结构stat变量,如struct stat varstat结构有一个名为st_mode的成员,该成员具有它是哪种文件的信息

struct stat {
    dev_t     st_dev;     /* ID of device containing file */
    ino_t     st_ino;     /* inode number */
    mode_t    st_mode;    /* protection */
    nlink_t   st_nlink;   /* number of hard links */
    uid_t     st_uid;     /* user ID of owner */
    gid_t     st_gid;     /* group ID of owner */
    dev_t     st_rdev;    /* device ID (if special file) */
    off_t     st_size;    /* total size, in bytes */
    blksize_t st_blksize; /* blocksize for file system I/O */
    blkcnt_t  st_blocks;  /* number of 512B blocks allocated */
    time_t    st_atime;   /* time of last access */
    time_t    st_mtime;   /* time of last modification */
    time_t    st_ctime;   /* time of last status change */
};

Directory也是Unix*中的一个文件,如果您想避免通过open()打开目录,您可能需要检查文件类型。正如@nayabbashasayed所说,您可以使用stat来检查文件类型和更多信息。

以下是通过stat:检查类型的示例代码

const char  *filePath;
struct stat  fileStatBuf;
if(stat(filePath,&fileStatBuf) == -1){
     perror("stat");
     exit(1);
}
/*
 *You can use switch to check all
 *the types you want, now i just use 
 *if to check one.
*/
if((fileStatBuf.st_mode & S_IFMT) == S_IFDIR){
    printf("This type is directoryn");
}

希望能对你有所帮助。

我不想使用其他任何东西作为读写,我发现错误是在使用read()时返回的,而不是由open()

返回的

相关内容

  • 没有找到相关文章

最新更新