1,access()函数判断文件夹或者文件是否存在
#include <unistd.h>
int access(const char *pathname, int mode);
- filename:可以填写文件夹路径或者文件路径
- mode
mode | 含义 |
---|---|
0 | (F_OK) 只判断是否存在 |
2 | (R_OK) 判断写入权限 |
4 | (W_OK) 判断读取权限 |
6 | (X_OK) 判断执行权限 |
- 返回值
若存在或者具有权限,返回值为0;不存在或者无权限,返回值为-1。 - 错误代码
代码 | 含义 |
---|---|
EACCESS | 参数pathname 所指定的文件不符合所要求测试的权限 |
EROFS | 欲测试写入权限的文件存在于只读文件系统内 |
EFAULT | 参数pathname指针超出可存取内存空间 |
EINVAL | 参数mode 不正确 |
ENAMETOOLONG | 参数pathname太长 |
ENOTDIR | 参数pathname为一目录 |
ENOMEM | 核心内存不足 |
ELOOP | 参数pathname有过多符号连接问题 |
EIO I/O | 存取错误 |
- 特别提醒:使用access()作用户认证方面的判断要特别小心,例如在access()后再做open()的空文件可能会造成系统安全上的问题。
2,mkdir()创建文件夹
#include <sys/stat.h>
#include <sys/types.h>
int mkdir(const char *pathname, mode_t mode);
- 该函数功能为创建一个新的目录,并指定它的执行权限。如果创建成功则返回0,否则,返回-1
- mode
mode | 含义 |
---|---|
S_IRWXU | 00700权限,代表该文件所有者拥有读,写和执行操作的权限 |
S_IRUSR(S_IREAD) | 00400权限,代表该文件所有者拥有可读的权限 |
S_IWUSR(S_IWRITE) | 00200权限,代表该文件所有者拥有可写的权限 |
S_IXUSR(S_IEXEC) | 00100权限,代表该文件所有者拥有执行的权限 |
S_IRWXG | 00070权限,代表该文件用户组拥有读,写和执行操作的权限 |
S_IRGRP | 00040权限,代表该文件用户组拥有可读的权限 |
S_IWGRP | 00020权限,代表该文件用户组拥有可写的权限 |
S_IXGRP | 00010权限,代表该文件用户组拥有执行的权限 |
S_IRWXO | 00007权限,代表其他用户拥有读,写和执行操作的权限 |
S_IROTH | 00004权限,代表其他用户拥有可读的权限 |
S_IWOTH | 00002权限,代表其他用户拥有可写的权限 |
S_IXOTH | 00001权限,代表其他用户拥有执行的权限 |
可叠加使用,如0755表示S_IRWXU|S_IRGRP|S_IXGRP|S_IROTH|S_IXOTH。表示该文件所有者拥有读,写和执行操作权限去,该文件用户组拥有可读,可执行的权限,其他用户拥有可读,可执行的权限。
2.1,mkdir()创建多级文件夹
mkdir只能一次创建一层目录
我要在当前目录下创建 head/follow/end/ 目录
有两种实现方式
- 一:直接创建
#include<sys/stat.h>
#include<sys/types.h>
mkdir(“head”,0777);
mkdir(“head/follow”.0777);
mkdir(“head/follow/end”,0777);
- 二:写函数
void mkdirs(char *muldir)
{
int i,len;
char str[512];
strncpy(str, muldir, 512);
len=strlen(str);
for( i=0; i<len; i++ )
{
if( str[i]=='/' )
{
str[i] = '\0';
if( access(str,0)!=0 )
{
mkdir( str, 0777 );
}
str[i]='/';
}
}
if( len>0 && access(str,0)!=0 )
{
mkdir( str, 0777 );
}
return;
}
之后调用
mkdirs(head/follow/end)
3,rmdir()删除文件夹
#include <unistd.h>
int rmdir(const char *pathname);
4,remove()函数用于删除指定的文件
#include <stdio.h>
int remove(const char *pathname);
- 函数参数
filename为要删除的文件名,可以为一目录。如果参数filename 为一文件,则调用unlink()处理;若参数filename 为一目录,则调用rmdir()来处理。 - 函数返回值
成功则返回0,失败则返回-1,错误原因存于errno。 - 函数错误码
错误码 | 含义 |
---|---|
EROFS | 欲写入的文件为只读文件 |
EFAULT | 参数filename 指针超出可存取内存空间 |
ENAMETOOLONG | 参数filename 太长 |
ENOMEM | 核心内存不足 |
ELOOP | 参数filename 有过多符号连接问题 |
EIO I/O | 存取错误 |