嵌入式Linux文件IO,目录操作,access()函数判断文件夹或者文件是否存在,mkdir()创建文件夹,rmdir()删除文件夹,remove()函数用于删除指定的文件

1,access()函数判断文件夹或者文件是否存在

#include <unistd.h>
int access(const char *pathname, int mode);

  1. filename:可以填写文件夹路径或者文件路径
  2. mode
mode含义
0(F_OK) 只判断是否存在
2(R_OK) 判断写入权限
4(W_OK) 判断读取权限
6(X_OK) 判断执行权限
  1. 返回值
    若存在或者具有权限,返回值为0;不存在或者无权限,返回值为-1。
  2. 错误代码
代码含义
EACCESS参数pathname 所指定的文件不符合所要求测试的权限
EROFS欲测试写入权限的文件存在于只读文件系统内
EFAULT参数pathname指针超出可存取内存空间
EINVAL参数mode 不正确
ENAMETOOLONG参数pathname太长
ENOTDIR参数pathname为一目录
ENOMEM核心内存不足
ELOOP参数pathname有过多符号连接问题
EIO I/O存取错误
  1. 特别提醒:使用access()作用户认证方面的判断要特别小心,例如在access()后再做open()的空文件可能会造成系统安全上的问题。

2,mkdir()创建文件夹

#include <sys/stat.h>
#include <sys/types.h>
int mkdir(const char *pathname, mode_t mode);

  1. 该函数功能为创建一个新的目录,并指定它的执行权限。如果创建成功则返回0,否则,返回-1
  2. mode
mode含义
S_IRWXU00700权限,代表该文件所有者拥有读,写和执行操作的权限
S_IRUSR(S_IREAD)00400权限,代表该文件所有者拥有可读的权限
S_IWUSR(S_IWRITE)00200权限,代表该文件所有者拥有可写的权限
S_IXUSR(S_IEXEC)00100权限,代表该文件所有者拥有执行的权限
S_IRWXG00070权限,代表该文件用户组拥有读,写和执行操作的权限
S_IRGRP00040权限,代表该文件用户组拥有可读的权限
S_IWGRP00020权限,代表该文件用户组拥有可写的权限
S_IXGRP00010权限,代表该文件用户组拥有执行的权限
S_IRWXO00007权限,代表其他用户拥有读,写和执行操作的权限
S_IROTH00004权限,代表其他用户拥有可读的权限
S_IWOTH00002权限,代表其他用户拥有可写的权限
S_IXOTH00001权限,代表其他用户拥有执行的权限

可叠加使用,如0755表示S_IRWXU|S_IRGRP|S_IXGRP|S_IROTH|S_IXOTH。表示该文件所有者拥有读,写和执行操作权限去,该文件用户组拥有可读,可执行的权限,其他用户拥有可读,可执行的权限。

2.1,mkdir()创建多级文件夹

mkdir只能一次创建一层目录
我要在当前目录下创建 head/follow/end/ 目录

有两种实现方式

  1. 一:直接创建

#include<sys/stat.h>
#include<sys/types.h>
mkdir(“head”,0777);
mkdir(“head/follow”.0777);
mkdir(“head/follow/end”,0777);

  1. 二:写函数
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);

  1. 函数参数
    filename为要删除的文件名,可以为一目录。如果参数filename 为一文件,则调用unlink()处理;若参数filename 为一目录,则调用rmdir()来处理。
  2. 函数返回值
    成功则返回0,失败则返回-1,错误原因存于errno。
  3. 函数错误码
错误码含义
EROFS欲写入的文件为只读文件
EFAULT参数filename 指针超出可存取内存空间
ENAMETOOLONG参数filename 太长
ENOMEM核心内存不足
ELOOP参数filename 有过多符号连接问题
EIO I/O存取错误
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值