当前位置: 技术问答>linux和unix
linux下C编程,需要一个函数判断目录是否存在
来源: 互联网 发布时间:2016-01-01
本文导语: linux下C编程,需要一个函数判断目录是否存在,如果不存在,如何创建这个目录。stat函数好像不行吧?谢谢 | stat函数好象是可以检测目录是否存在的 mode_t st_mode; 可以通过这个来...
linux下C编程,需要一个函数判断目录是否存在,如果不存在,如何创建这个目录。stat函数好像不行吧?谢谢
|
stat函数好象是可以检测目录是否存在的
mode_t st_mode;
可以通过这个来判断得到的是一个目录还是其他东西
S_IFMT 0170000 bitmask for the file type bitfields
S_IFSOCK 0140000 socket
S_IFLNK 0120000 symbolic link
S_IFREG 0100000 regular file
S_IFBLK 0060000 block device
S_IFDIR 0040000 directory //如果为这个值,说明它是个目录
S_IFCHR 0020000 character device
S_IFIFO 0010000 fifo
S_ISUID 0004000 set UID bit
S_ISGID 0002000 set GID bit (see below)
S_ISVTX 0001000 sticky bit (see below)
S_IRWXU 00700 mask for file owner permissions
S_IRUSR 00400 owner has read permission
S_IWUSR 00200 owner has write permission
S_IXUSR 00100 owner has execute permission
S_IRWXG 00070 mask for group permissions
S_IRGRP 00040 group has read permission
S_IWGRP 00020 group has write permission
S_IXGRP 00010 group has execute permission
S_IRWXO 00007 mask for permissions for others (not in group)
S_IROTH 00004 others have read permission
S_IWOTH 00002 others have write permisson
S_IXOTH 00001 others have execute permission
ENOENT A component of the path file_name does not exist,
or the path is an empty string.
返回这个错误说明不存在
可以man 2 stat看一下,里面解释挺详细的
创建目录的方法:
mkdir("目录名","权限");
mkdir("/home/txt/a.txt",07777);
mode_t st_mode;
可以通过这个来判断得到的是一个目录还是其他东西
S_IFMT 0170000 bitmask for the file type bitfields
S_IFSOCK 0140000 socket
S_IFLNK 0120000 symbolic link
S_IFREG 0100000 regular file
S_IFBLK 0060000 block device
S_IFDIR 0040000 directory //如果为这个值,说明它是个目录
S_IFCHR 0020000 character device
S_IFIFO 0010000 fifo
S_ISUID 0004000 set UID bit
S_ISGID 0002000 set GID bit (see below)
S_ISVTX 0001000 sticky bit (see below)
S_IRWXU 00700 mask for file owner permissions
S_IRUSR 00400 owner has read permission
S_IWUSR 00200 owner has write permission
S_IXUSR 00100 owner has execute permission
S_IRWXG 00070 mask for group permissions
S_IRGRP 00040 group has read permission
S_IWGRP 00020 group has write permission
S_IXGRP 00010 group has execute permission
S_IRWXO 00007 mask for permissions for others (not in group)
S_IROTH 00004 others have read permission
S_IWOTH 00002 others have write permisson
S_IXOTH 00001 others have execute permission
ENOENT A component of the path file_name does not exist,
or the path is an empty string.
返回这个错误说明不存在
可以man 2 stat看一下,里面解释挺详细的
创建目录的方法:
mkdir("目录名","权限");
mkdir("/home/txt/a.txt",07777);
|
还可以用函数 DIR * opendir(const char * name);
函数说明 opendir()用来打开参数name指定的目录,并返回DIR*形态的目录流,和open()类似,接下来对目录的读取和搜索都要使用此返回值。
返回值 成功则返回DIR* 型态的目录流,打开失败则返回NULL。
错误代码 EACCESS 权限不足
EMFILE 已达到进程可同时打开的文件数上限。
ENFILE 已达到系统可同时打开的文件数上限。
ENOTDIR 参数name非真正的目录
ENOENT 参数name 指定的目录不存在,或是参数name 为一空字符串。
ENOMEM 核心内存不足。
函数说明 opendir()用来打开参数name指定的目录,并返回DIR*形态的目录流,和open()类似,接下来对目录的读取和搜索都要使用此返回值。
返回值 成功则返回DIR* 型态的目录流,打开失败则返回NULL。
错误代码 EACCESS 权限不足
EMFILE 已达到进程可同时打开的文件数上限。
ENFILE 已达到系统可同时打开的文件数上限。
ENOTDIR 参数name非真正的目录
ENOENT 参数name 指定的目录不存在,或是参数name 为一空字符串。
ENOMEM 核心内存不足。
|
stat是可以作到的,具体的返回值请参考man 3 stat,一般我都不太记这些东西