linux中创建目录树,如何在C/Linux中创建目录树?

这里有一个C函数可以用C编译器编译。

/*

@(#)File: $RCSfile: mkpath.c,v $

@(#)Version: $Revision: 1.13 $

@(#)Last changed: $Date: 2012/07/15 00:40:37 $

@(#)Purpose: Create all directories in path

@(#)Author: J Leffler

@(#)Copyright: (C) JLSS 1990-91,1997-98,2001,2005,2008,2012

*/

/*TABSTOP=4*/

#include "jlss.h"

#include "emalloc.h"

#include

#ifdef HAVE_UNISTD_H

#include

#endif /* HAVE_UNISTD_H */

#include

#include "sysstat.h" /* Fix up for Windows - inc mode_t */

typedef struct stat Stat;

#ifndef lint

/* Prevent over-aggressive optimizers from eliminating ID string */

const char jlss_id_mkpath_c[] = "@(#)$Id: mkpath.c,v 1.13 2012/07/15 00:40:37 jleffler Exp $";

#endif /* lint */

static int do_mkdir(const char *path, mode_t mode)

{

Stat st;

int status = 0;

if (stat(path, &st) != 0)

{

/* Directory does not exist. EEXIST for race condition */

if (mkdir(path, mode) != 0 && errno != EEXIST)

status = -1;

}

else if (!S_ISDIR(st.st_mode))

{

errno = ENOTDIR;

status = -1;

}

return(status);

}

/**

** mkpath - ensure all directories in path exist

** Algorithm takes the pessimistic view and works top-down to ensure

** each directory in path exists, rather than optimistically creating

** the last element and working backwards.

*/

int mkpath(const char *path, mode_t mode)

{

char *pp;

char *sp;

int status;

char *copypath = STRDUP(path);

status = 0;

pp = copypath;

while (status == 0 && (sp = strchr(pp, '/')) != 0)

{

if (sp != pp)

{

/* Neither root nor double slash in path */

*sp = '\0';

status = do_mkdir(copypath, mode);

*sp = '/';

}

pp = sp + 1;

}

if (status == 0)

status = do_mkdir(path, mode);

FREE(copypath);

return (status);

}

#ifdef TEST

#include

/*

** Stress test with parallel running of mkpath() function.

** Before the EEXIST test, code would fail.

** With the EEXIST test, code does not fail.

**

** Test shell script

** PREFIX=mkpath.$$

** NAME=./$PREFIX/sa/32/ad/13/23/13/12/13/sd/ds/ww/qq/ss/dd/zz/xx/dd/rr/ff/ff/ss/ss/ss/ss/ss/ss/ss/ss

** : ${MKPATH:=mkpath}

** ./$MKPATH $NAME &

** [...repeat a dozen times or so...]

** ./$MKPATH $NAME &

** wait

** rm -fr ./$PREFIX/

*/

int main(int argc, char **argv)

{

int i;

for (i = 1; i < argc; i++)

{

for (int j = 0; j < 20; j++)

{

if (fork() == 0)

{

int rc = mkpath(argv[i], 0777);

if (rc != 0)

fprintf(stderr, "%d: failed to create (%d: %s): %s\n",

(int)getpid(), errno, strerror(errno), argv[i]);

exit(rc == 0 ? EXIT_SUCCESS : EXIT_FAILURE);

}

}

int status;

int fail = 0;

while (wait(&status) != -1)

{

if (WEXITSTATUS(status) != 0)

fail = 1;

}

if (fail == 0)

printf("created: %s\n", argv[i]);

}

return(0);

}

#endif /* TEST */

宏STRDUP()和FREE()是错误检查版本的strdup()和free(),在emalloc.h中声明(并在emalloc.c和estrdup.c中实现)。 “sysstat.h”头处理< sys / stat.h>的破坏版本。并且可以被< sys / stat.h>在现代的Unix系统(但在1990年有很多问题)。和“jlss.h”声明mkpath()。

v1.12(上一个)和v1.13(上面)之间的更改是对do_mkdir()中的EEXIST的测试。这是指出必要的Switch – 谢谢你,Switch。测试代码已经升级,并在MacBook Pro(2.3GHz Intel Core i7,运行Mac OS X 10.7.4)上重现了这个问题,并建议问题在修订版本中是固定的(但测试只能显示错误的存在,从不缺席)。

(因此,您有权将此代码用于出于任何目的而使用归因。)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/246391.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

特洛伊木马脚本linux,手动查杀特洛伊木马

首先也是最重要的&#xff0c;重新启动电脑到安全模式下&#xff0c;让所有文件都可见。然后进入到C:看看根目录是否存在不熟悉的文件&#xff0c;如果有&#xff0c;且日期为发现中毒现象当天&#xff0c;则删除之。接着到c:\windows&#xff0c;首先按照修改时间顺序排列图标…

linux统计日志,Linux一些常使用的统计日志 方法

IP相关统计统计IP访问量(独立ip访问数量)awk {print $1} access.log | sort -n | uniq | wc -l查看某一时间段的IP访问量(4-5点)grep "07/Apr/2017:0[4-5]" access.log | awk {print $1} | sort | uniq -c| sort -nr | wc -l查看访问最频繁的前100个IPawk {print $1}…

linux常见分区格式,linux 分区格式

一、分区与格式化的原理二、使用linux中的fdisk分区三、使用mkfs创建文件系统四、硬盘分区的挂载&#xff1b;一、分区原理1、主分区表(64byte)&#xff1a;记录分区的起始与结束柱面、主分区个数。主分区大小有限&#xff0c;不能超过四个主分区2、扩展分区&#xff1a;将一个…

linux添加虚拟硬盘命令,虚拟机linux扩盘命令操作

虚拟机linux扩展硬盘分原有硬盘上增加及新增硬盘&#xff0c;二者实现差不多。扩盘&#xff1a;fdisk -l查看是哪个盘扩盘了&#xff0c;如sdb重启后&#xff0c;将sdb刷新pv&#xff1a; pvresize /dev/sdb&#xff0c;pvdisplay查看是否增加了&#xff0c;再将逻辑卷分区VG(L…

linux的ping工具,用linux下的tcping工具测试已禁ping服务器延迟

方法一先用apt-get或者yum安装tcptraceroute bc这两个工具&#xff0c;然后执行cd /usr/binwget http://www.vdberg.org/~richard/tcppingchmod x tcppingmv tcpping tcping实际效果如下# tcping www.baidu.com 80seq 0: tcp response from 119.75.216.20 [open] 28.308 msseq …

mac ssh远程登录linux,MAC使用SSH远程登录

8种机械键盘轴体对比本人程序员&#xff0c;要买一个写代码的键盘&#xff0c;请问红轴和茶轴怎么选&#xff1f;Sun 20 December 2015tags: 备忘录MAC使用SSH远程登录打开sshMac Terminal是自带SSH的&#xff0c;可以用whereis来看看$ whereis ssh但是在现有进程中是找不到ssh…

四叶草引导windows和linux,Windows环境下使用Clover四叶草引导双硬盘安装OSX 10.11.5原版镜像...

作为一个穷逼大学生&#xff0c;想搞iOS开发 买不起Mac只能鼓捣鼓捣黑苹果啦。。。。。。。。之前我的电脑通过变色龙引导的方式装了个OSX10.10和win8.1双系统&#xff0c;因为自学的是Swift语言之前装的OSX10.10.4的Xcode(6.多版本的)只支持到Swift1.2&#xff0c;所以现在要装…

linux bash 字符串 连接,Linux Bash 中字符串操作

Linux Bash 中字符串操作所谓 "子字符串" 就是出现在其它字符串内的字符串. 比如 "3382" 就是 "this is a 3382 test" 的子字符串. 我们有多种方法可以从中把数字或指定部分字符串抽取出来.本文会向你展示在 bash shell 中如何获取或者说查找出子…

C#中typeof 与GetType()的区别和methodinfo、memberinfo反射

C#中任何对象都具有GetType()方法&#xff0c;它的作用和typeof()相同&#xff0c;返回Type类型的当前对象的类型。typeof(x)中的x&#xff0c;必须是具体的类名、类型名称等&#xff0c;不可以是变量名称&#xff1b;GetType()是基类System.Object的方法&#xff0c;因此只有建…

maven下载源码linux,Maven 下载 源码和javadoc 命令

摘要&#xff1a;我们在写代码时候&#xff0c;往往是想查看一下源码&#xff0c;看看源码的一些细节内容。一般情况下&#xff0c;在IDE(如eclipse)中近仅仅只需按住ctrl 点击对应的方法即可进入对应的源码部分。但是有些时候很多依赖项并不会默认下载对应的源码&#xff0c;因…

监听Hierachy、Project等视图结构变化的事件

之前上网看了MOMO关于监听Hierachy、Project等视图结构变化的事件&#xff0c;原代码是一个日本人写的&#xff0c;MOMO也没有讲原理。这里我通过自己的理解加了些注释&#xff0c;可能有不正确的地方&#xff0c;希望大神指点。 其中用到了[InitializeOnLoad]&#xff0c;可以…

linux交叉编译tile环境搭建,g ++ - 在Ubuntu中在32位上交叉编译64位程序时,缺少包含“bits / c ++ config.h”...

在我的64位系统上&#xff0c;我注意到存在以下目录&#xff1a;/usr/include/c/4.4/x86_64-linux-gnu/32/bits那么我的32位系统已经设置为64位交叉编译就应该有一个相应的目录&#xff0c;如&#xff1a;/usr/include/c/4.4/i686-linux-gnu/64/bits我仔细检查了这个目录不存在…

Unity3D研究院之获取摄像机的视口区域

在网上看了momo的文章&#xff0c;在这把代码加入些注释&#xff0c;也便于自己理解记忆。原理很简单&#xff0c;就是根据摄像机的参数计算距离摄像机某一距离的摄像机窗口四个position。 using UnityEngine; using System.Collections;public class CameraView : MonoBehavio…

linux 的文件软链接隐藏,Linux inode及硬链接软链接详解

Linux inode及硬链接软链接详解York • 2020 年 09 月 28 日Loading...操作系统的文件数据除了实际内容之外&#xff0c;通常含有非常多的属性&#xff0c;例如 Linux操作系统的文件权限与文件属性。文件系统通常会将这两部分内容分别存放在 inode和 block中。---# inode 和 bl…

Unity中date相关问题

今天遇到了从服务器获取unix时间戳&#xff0c;将其转换为时间并显示的需求。Unity中可以使用C#中有关的date函数来处理这个问题。 首先UNIX时间戳的定义如下&#xff1a; Unix时间戳&#xff08;英文为Unix epoch, Unix time, POSIX time 或 Unix timestamp&#xff09; 是…

linux集群管理权限,Linux下ACL权限管理

1.开启ACL功能(1)永久开启①#tune2fs -o acl /dev/sdb2②#cd /etc/fstab#vim fstab写入&#xff1a;/dev/sdb2 /mnt/sdb ext3 defaults,acl 0 0(2)临时开启已挂起的分区:#mount -o remount acl /dev/sdb2未挂载的分区#mount -o /dev/sdb2 /mnt/sdb2.查看是否开启ACL#tune2fs -l…

查找unity工程代码中中文字符

游戏本地化的时候可能需要搜索工程代码中的中文字符。 这个可以通过加载文件一行一行读取后&#xff0c;通过正则来查询。 下面的代码LoadFile函数通过流加载文件&#xff0c;FindFile通过递归病使用DirectoryInfo类和FileInfo类读取子目录和文件&#xff0c;并通过正则匹配出…

linux so_nosigpipe,TCP_NODELAY/SO_LINGER/SO_NOSIGPIPE/MSG_NOSIGNAL设置

下面是TCP_NODELAY/SO_LINGER/SO_NOSIGPIPE/MSG_NOSIGNAL的设置方法&#xff1a;其中由于平台的不同&#xff0c;区分SO_NOSIGPIPE和MSG_NOSIGNAL有所分区&#xff1a;int optval 1;// turn off SIGPIPE signal#ifdef __linux__setsockopt(m_Sockfd, SOL_SOCKET, MSG_NOSIGNAL…

Unity将来时:IL2CPP是什么?

Unity3D 想必大家都不陌生&#xff0c;独立游戏制作者们很多人都在用它&#xff0c;甚至一些大公司也用在很商业的游戏制作上。Unity3D最大的一个特点是一次制作&#xff0c;多平台部署&#xff0c;而 这一核心功能是靠Mono实现的。可以说Mono是Unity3D核心的核心&#xff0c;是…

计算信源熵和香农编码C语言,信息论与编码课程设计报告-统计信源熵与香农编码.pdf...

信息论与编码课程设计报告设计题目&#xff1a; 统计信源熵与香农编码专业班级 电 信 12-06学 号学生姓名指导教师教师评分2015 年 3 月 30 日目 录- 0 -一、设计任务与要求1.统计信源熵要求&#xff1a;统计任意文本文件中各字符(不区分大小写)数量&#xff0c;计算字符概率&a…