linux c mkdir遇到的坑

【Linux C】目录相关的操作函数 mkdir、rmdir、opendir、readdir、closedir、getcwd、chdir 本文介绍Linux下目录操作相关的一些函数。 mkdir、rmdir、opendir、readdir、closedir、getcwd、chdir。 我们将从函数原型、头文件、函数作用、参数含义、返回值以及示例代码几个方面进行总结。 阅读详情

mkdir创建目录时,有时会报权限问题错误,创建目录失败,有时可以正常创建目录,但mkdir设置目录权限为S_IRWXU | S_IRWXG | S_IRWXO时,权限一直不正确,可能是这个问题导致的创建目录失败;
1.mkdir函数对创建的目录进行设置权限之前,需要调用umask(0)函数,否则创建的目录权限不是自己传入的权限;
权限值:mode&(~umask权限值取反);
在终端执行:umask
0002
touch 空文件默认属性最大为666,ugo都没有可执行x的权限
之后将666-002等于664
touch test.txt
-rw-rw-r-- 1 zhangsan zhangsan 78 Dec 14 15:48 m.txt
touch 目录默认属性为777, 因为目录没有x执行权限的话,就无法进入该目录
777-002等于775
mkdir 20201214
drwxrwxr-x 2 zhangsan zhangsan 4096 Dec 14 16:15 20201214
所以在创建文件或目录时,需要执行umask(0),否则设置的权限不是自己想要的结果
2.递归创建目录时,需要已创建的上层目录为777,/home/data中data目录为777权限, 20190202这个目录或该目录子目录创建时,权限正确;

#include <stdio.h>
#include <string.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <errno.h>

int make_dir_iterator_rec(int* p_err_cd, char *mkdir_path)
{
    char tmp_buf[2000+1];
    char tmp_dir[2000+1];
    char *p_tmp = NULL ,*p_tmp1 = NULL;
    int n_ret = 0;
    mode_t old_mask;
    
    memset(tmp_buf,0,sizeof(tmp_buf));
    memset(tmp_dir,0,sizeof(tmp_dir));

    if(strlen(mkdir_path) > 2000 )
    {
        *p_err_cd = 1000;
        return -1;
    }
    strcat(tmp_buf,"/");

    p_tmp1 = mkdir_path;
    while(1)
    {
        if(p_tmp1[0] =='\0')
            return 0;
        p_tmp = strchr(p_tmp1,'/');
        if(p_tmp == NULL)
        {
            strcat(tmp_buf,p_tmp1);
            old_mask = umask(0);
            n_ret=mkdir(tmp_buf, S_IRWXU | S_IRWXG | S_IRWXO);
            umask(old_mask);
            if(n_ret!=0 && errno!= EEXIST)
            {
                *p_err_cd = 3000 + errno;
                return -1;
            }
            break;
        }
        else if(p_tmp == p_tmp1 )
        {
            p_tmp1++;
            continue;
        }
        memset(tmp_dir,0x00,sizeof(tmp_dir));
        memcpy(tmp_dir,p_tmp1,p_tmp-p_tmp1+1);
        strcat(tmp_buf,tmp_dir);
        /*
         *mkdir(path, mode)设置目录权限时,需要调用umask(cmode)函数
         *最终权限值:mode&(~cmode),即mode与(cmode取反)
         */
        old_mask = umask(0);
        n_ret=mkdir(tmp_buf, S_IRWXU | S_IRWXG | S_IRWXO);
        umask(old_mask);
        
        if(n_ret!=0 && errno!= EEXIST)
        {
            *p_err_cd = 3000 + errno;
            return -1;
        }
        p_tmp1 = p_tmp++;
    }

    return 0;
}

int main()
{
    char path[1024];
    int error = 0;
    memset(path, 0x00, sizeof(path));
    
    memcpy(path, "/home/data/20190202", sizeof(path));
    int res = make_dir_iterator_rec(&error, path);
    if (res != 0)
    {
        printf("make_dir_iterator_rec fail, erron=%d,msg=%s\n", error, strerror(errno));
        return -1;
    }

    return 0;
}

Linux命令·mkdir mkdir 阅读详情

相关推荐

Python与Wind量化接口实战:从配置到数据提取全流程解析

本文详细解析了Python与Wind量化接口的实战应用,从环境配置到数据提取全流程。通过Anaconda管理Python环境,安装WindPy接口,实现历史行情、截面数据和实时行情的查询与优化。文章还提供了高级功能如批量查询、数据缓存策略及实战案例,帮助开发者高效构建量化分析框架。

omega的博客 1327

Linux下用C语言使用函数创建一个目录、多级目录以及删除目录(mkdir,access,rmdir函数)

参数含义:需要删除目录的对应路径名,并且该目录必须是一个空目录,也就是该目录下只有.和..这两个目录。pathname指定的路径名不能是软链接文件,即使该链接文件指向了一个空目录。若目录创建成功,则返回0;否则返回-1,并将错误记录到全局变量errno中。返回值:成功返回0;并会设置errno.

qq_61988957的博客 6774

历年CSP-J(NOIP普及组)考点分析与分类汇总(纯干货)

noip/csp-j历年真题考点分类

weixin_42358969的博客 1万+

linux 中 一些函数

1.   ilnux中判断文件是否存在, 不存在则创建 if(access("flow",0)==-1)//access函数是查看文件是不是存在 {            if (mkdir("flow", S_IRWXU | S_IRWXG | S_IRWXO))//如果不存在就用mkdir函数来创建            {                      

话题在绕弯的专栏 967

PPO(Proximal Policy Optimization)算法原理及实现,详解近端策略优化

接着上面的讲,PG方法一个很大的缺点就是参数更新慢,因为我们每更新一次参数都需要进行重新的采样,这其实是中on-policy的策略,即我们想要训练的agent和与环境进行交互的agent是同一个agent;与之对应的就是off-policy的策略,即想要训练的agent和与环境进行交互的agent不是同一个agent,简单来说,就是拿别人的经验来训练自己。举个下棋的例子,如果你是通过自己下棋来不断提升自己的棋艺,那么就是on-policy的,如果是通过看别人下棋来提升自己,那么就是off-policy的。

weixin_41106546的博客 9万+

世界模型和大语言模型结合开发自动驾驶算法

摘要:自动驾驶系统开发中,融合世界模型和大语言模型可显著提升效率和安全性。世界模型负责环境感知与预测(如目标检测、轨迹预测),而大语言模型优化代码生成、决策解释等环节。实施路径包括需求分析(1-2周)、模型开发(2-4个月)、模拟测试(1-2个月)、实车测试(2-3个月)和合规优化(1-2个月),总周期6-12个月。关键技术工具包括PyTorch/TensorFlow、CARLA模拟器和ROS系统,核心设计理念强调模块化、安全优先和敏捷迭代。示例代码展示了YOLO目标检测与大语言模型决策建议的集成方案。该方

ponygame的博客 826

Linux系统编程——POSIX IPC

POSIX IPC POSIX IPC中的xxx_open()中的一些意义相同参数的取值: xxx可以是mq(消息队列)、sem(信号量)、shm(共享内存) 参数oflag: O_RDONLY - 可读 O_WRONLY - 可写 O_RDWR - 可读可写 O_CREAT - 队列不存则创建,需要使用mode和attr参数 如果文件存在,mode和attr参数被忽略 O_EXCL - 如果使用O_CREAT,消息队列存在则创建失败 O_NONBLOCK - 非阻塞模式打开 参数mo

欲盖弥彰1314 665

基于OpenSSL的CA建立及证书签发(签发多域名/IP)

自签SSL证书(多域名/IP) 本文基于以下环境: 内核信息:Linux zabbix 3.10.0-957.el7.x86_64 #1 SMP Thu Nov 8 23:39:32 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux 系统版本:CentOS Linux release 7.6.1810 (Core) OpenSSL版本:OpenSSL 1.0.2k-fips 26 Jan 2017 【前言】 在基于OpenSSL的CA建立及证书签发一文中(后面统.

hobby云说 4647

Linux shell命令

linux

Wl2oo1的博客 397

手把手教你用ADIsimCLK和GUI搞定HMC7044时钟配置(附避坑指南)

本文详细解析了HMC7044时钟芯片的配置方法,通过ADIsimCLK和HMC7044 Configuration GUI工具,从频率规划到硬件验证全流程实战演示。特别针对PLL模式选择、分频链配置等易错环节,提供量产验证的配置模板和实测数据,帮助工程师快速掌握高性能时钟解决方案。

weixin_30755393的博客 806

YOLOv13改进策略【特征提取层】| CVPR-2024 PKI Module 获取多尺度纹理特征,适应尺度变化大的目标

PKI Module是。

Limiiiing的博客 275

Linux 零基础入门学习笔记|从虚拟机操作到 C 语言编译运行(新手完整版)

今天系统学习了 Linux 入门全套基础内容,从虚拟机快捷键、终端命令、用户权限、目录结构、文件操作,到 vi 编辑器、gcc 编译 C 代码完整流程。全程实操记录,适合零基础小白入门,整理成笔记方便自己复盘,也分享给刚接触 Linux 的同学。提示:以下是本篇文章正文内容,下面案例可供参考直接./xxx.c运行源码会报权限错误,必须先 gcc 编译rm -rf删除目录不可逆,操作前确认目录内容切换 root 操作记得加sudo,普通用户无修改系统文件权限vi 编辑器分不清模式:写代码先按i。

weixin_48445537的博客 87

Claude Code Cli 源码泄露事件全解析:从51万行代码中拆解AI Agent的记忆护城河

2026年3月,Anthropic的AI编程助手Claude Code意外泄露51万行核心代码,暴露了其多Agent架构、六级权限验证系统及创新的记忆机制。记忆系统采用四层设计:用户自定义框架、自动记忆提取、智能上下文压缩和纯文件存储。最独特的是"自动做梦"功能,AI会定期整理记忆,类似人类睡眠记忆巩固。代码还揭示未发布功能如电子宠物系统,但也暴露权限系统漏洞和代码质量问题。这次泄露展现了AI助手核心技术的复杂性,特别是其记忆系统如何通过透明可编辑的设计建立用户信任。

program哲学 469

Days 2 linux系统初识

后续继续学习 C 语言基础数据类型、常量变量,把今天的代码拓展更多练习。新建 / 打开代码文件按i,左下角出现 INSERT,进入插入模式写代码写完代码,按Esc回到命令模式输入:wq回车,保存并退出编辑器运行int main()// 1.定义double浮点变量,存储小数(半径、周长、面积)double r;// 定义同时初始化赋值// 同类型多变量一行定义r = 5;// 赋值运算符=,给半径赋值5// 2.算术运算符* 乘法,计算周长、面积。

Q3365879的博客 219

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

linux下C语言mkdir,Linux C实现mkdir功能

一:背景Linux 中的mkdir命令是用来创建一个目录的,相应的就需要使用到linux中的系统调用函数mkdir来实现目录创建的功能。单单只是创建目录的话一个系统调用足以,本文是使用mkdir函数来实现mkdir -p这个选项的功能,对其不存在的父目录实现创建。二:思路对于一个a/b/c这样的一个多级目录,要想实现父目录的创建方法和思路有很多,可以进行字符串处理分出一级一级目录来,但是这样实现很...

weixin_36259655的博客 2867

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

windows下的_mkdir 和 linux下的mkdir

需要注意的是 windows下的_mkdir()只需要一个路径的参数,而linux下的mkdir()需要两个参数,第一个是路径,第二个是权限。以下是linux下的mkdir的讲解:NAMEmkdir - make a directorySYNOPSIS<br />#include <sys/stat.h><br /><br />int mkdir(const char *path, mode_tmode);<br />DESCRIPTION<br />The mkdir() function shall c

兔子吃南瓜 1万+

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

linux下mkdir头文件_Linux C 创建目录函数mkdir相关【转】

————————————————————————————————————————————————I.LinuxC 创建目录函数mkdir的mode设置问题函数原型:#include int mkdir(const char *path, mode_t mode);参数:path是目录名mode是目录权限返回值:返回0 表示成功, 返回 -1表示错误,并且会设置errno值。mode模式位:mod...

weixin_29547681的博客 483

linux c实现mkdir命令

#include #include #include #include #include #include int main(int argc,char* argv[]) {   if(argc != 2)   {     printf("Usage:%s dirname",basename(argv[0]));     exit(0);   }   if(m

3995

linux C实现mkdir功能

一:背景linux 中的mkdir命令是用来创建一个目录的,相应的就需要使用到linux中的系统调用函数mkdir来实现目录创建的功能。单单只是创建目录的话一个系统调用足以,本文是使用mkdir函数来实现mkdir -p这个选项的功能,对其不存在的父目录实现创建。二:思路 对于一个a/b/c这样的一个多级目录,要想实现父目录的创建方法和思路有很多,可以进...

weixin_33857679的博客 3268

Linux 创建目录函数mkdir

一、Linux 创建目录函数mkdir的mode设置问题 函数原型: #include <sys/stat.h> int mkdir(const char *path, mode_t mode); 参数: path是目录名 mode是目录权限 返回值: 返回0 表示成功, 返回 -1表示错误,并且会设置errno值。 mode模式位: S_IRUSR:用户读权限 S_IWUSR:用户写权限 S_IRGRP:用户组读权限 S_IWGRP:用户组写权限 S_IROTH:其他组都权

qq_20853741的博客 5817

linux c 构造函数,Linux C实现mkdir功能

一:背景Linux 中的mkdir命令是用来创建一个目录的,相应的就需要使用到linux中的系统调用函数mkdir来实现目录创建的功能。单单只是创建目录的话一个系统调用足以,本文是使用mkdir函数来实现mkdir -p这个选项的功能,对其不存在的父目录实现创建。二:思路对于一个a/b/c这样的一个多级目录,要想实现父目录的创建方法和思路有很多,可以进行字符串处理分出一级一级目录来,但是这样实现很...

weixin_42303721的博客 249

linux下C语言中mkdir和rmdir函数

mkdir函数用于创建目录。格式如下:       #include       #include       #include       int mkdir(const char *pathname,mode_t mode);      其中参数pathname是新创建目录的目录名,mode指定该目录的访问权限,这些位将受到文件创建方式屏蔽(umask)的修正。       该函数

cssiqi的专栏 6425

linux下mkdir头文件_Linux中mkdir函数与Windows中_mkdir函数的区别

下面先来给大家介绍windows下_mkdir函数#includeint _mkdir( const char *dirname );参数:dirname是目录的路径名指针返回值:如果新目录的创建时间,这些功能中的每一个返回值 0。 在错误,则函数返回 – 1linux下mkdir函数mode_t参数详解#include int mkdir(const char *path, mode_t mod...

weixin_29266647的博客 1400

Linux C/C++源码实现常见命令mkdir

Linux系统是由文件和目录组成的。当我们使用Linux系统时,经常会从中创建目录来保存文件等等,这时会使用Linux自带 mkdir 的命令,用于在操作系统中创建目录或文件夹。在本文中,我们将讨论如何使用带有各种命令行选项的 mkdir 命令以及代码实现。 mkdir命令代码实现 在 Linux 中,虽然 rm 命令允许您删除目录,但首先是 mkdir 命令允许您创建目录。下面我们实现mkdir命令: #include <stdio.h> #include <sys/types.h&gt

chen1415886044的博客 5938
上一篇: linux 消息队列实例
下一篇: linux c socket多进程服务端
最后冰吻free
博客等级 码龄12年 121粉丝 371原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值