当前位置: 首页 > news >正文

Linux系统调用之目录操作函数

前言

如果,想要深入的学习Linux系统调用中mkdir,rmdir,rename,chdir,getcwd等这些有关于目录操作函数,还是需要去自己阅读Linux系统中的帮助文档。
具体输入命令:

man 2 mkdir/rmdir/rename/chdir/getcwd

即可查阅到完整的资料信息。

mkdir函数

mkdir函数是Linux系统API中的一员,它的作用是:创建一个目录

它的函数原型是长这样的:

int mkdir(const char *pathname, mode_t mode);

接下来,我来介绍一下它的两个参数与返回值

    参数:pathname: 创建的目录的路径mode: 权限,八进制的数,最终你创建出来的文件权限是:mode & (~umask)返回值:成功返回0, 失败返回-1

关于Linux中权限知识不懂的同学,可以看这篇文章详解Linux文件类型与权限

在使用这个函数之前,我们需要往C/C++文件中导入这些头文件:

#include <sys/stat.h>
#include <sys/types.h>

下面用一个代码例子来演示一下mkdir函数的作用:

代码演示:创建一个目录

#include <sys/stat.h>
#include <sys/types.h>
#include <stdio.h>int main() {int ret = mkdir("aaa",0777);if(ret == -1) {perror("mkdir");return -1;}return 0;
}

查看一下创建好的文件信息

nowcoder@nowcoder:~/Linux/lession14$ ls -dl aaa
drwxrwxrwx 2 nowcoder nowcoder 4096 33 22:01 aaa

顺便来讲一下这个函数的Linux命令把,使用命令创建一个目录:mkdir 目录名

rmdir函数

这个函数只能删除空目录,作用比较小,就不演示了,如果同学们想要去了解,输入命令:

man 2 rmdir

自行查看说明文档即可

对于的Linux命令可以是rmdir 空文件名

rename函数

rename函数是Linux系统API中的一员,它的作用是:

  • 修改文件的名称或路径

它的函数原型是长这样的:

int rename(const char *oldpath, const char *newpath);

接下来,我来介绍一下它的两个参数与返回值

    参数:oldpath: 旧的文件名(路径)newpath:新的文件名(路径)返回值:成功返回0, 失败返回-1

在使用这个函数之前,我们需要往C/C++文件中导入这个头文件:

#include <stdio.h>

下面用一个代码例子来演示一下rename函数的作用:

代码演示,修改一个文件的名称(路径)

#include <stdio.h>int main() {int ret = rename("aaa", "bbb");if(ret == -1) {perror("rename");return -1;}return 0;
}

至此文件aaa就被修改为bbb了。

这个rename函数与Linux命令mv的作用是相同的,重命名或移动文件的位置。

chdir函数 与 getcwd函数

chdir函数

chdir函数是Linux系统API中的一员,它的作用是:修改进程的工作目录。

它的函数原型是长这样的:

int chdir(const char *path);

接下来,我来介绍一下它的参数与返回值

    参数:path: 修改后的进程的工作目录返回值:成功返回0, 失败返回-1

在使用这个函数之前,我们需要往C/C++文件中导入这个头文件:

#include <unistd.h>

getcwd函数

chdir函数是Linux系统API中的一员,它的作用是:获取当前的工作目录

它的函数原型是长这样的:

char *getcwd(char *buf, size_t size);

接下来,我来介绍一下它的参数与返回值

    参数:buf: 一个传出数组,用来存储当前进程工作目录的路径。size:数组的大小返回值:进程工作目录的路径。

在使用这个函数之前,我们需要往C/C++文件中导入这个头文件:

#include <unistd.h>

现在介绍完了这两个函数,接下来让我用一个例子来展示这两个函数的用法。

代码实例:在当前工作目录下用程序在别的工作目录里生成一个文件(修改工作路径)

#include <unistd.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>// int open(const char *pathname, int flags, mode_t mode);
// char *getcwd(char *buf, size_t size);
// int chdir(const char *path);int main()
{char buf[100];getcwd(buf, 100);printf("当前的工作路径为:%s\n", buf);int ret = chdir("../lession13");if (ret == -1){perror("chdir");return -1;}printf("将工作路径修改为:%s\n", "../lession13");int fd = open("chdir", O_CREAT | O_RDWR, 0664);if (fd == -1){perror("open");return -1;}close(fd);char buf1[100];getcwd(buf1, 100);printf("当前的工作路径为:%s\n", buf1);return 0;
}

代码输出结果为:

nowcoder@nowcoder:~/Linux/lession14$ ./chdir 
当前的工作路径为:/home/nowcoder/Linux/lession14
将工作路径修改为:../lession13
当前的工作路径为:/home/nowcoder/Linux/lession13

总结

今天学习的Linux系统调用有关于目录操作的函数共有这些mkdir,rmdir,rename,chdir,getcwd。实际操作下来还是十分有意思的。

http://www.lryc.cn/news/28858.html

相关文章:

  • 设计模式-策略模式
  • 面试+算法:罗马数字及Excel列名与数字互相转换
  • Connext DDS路由服务Routing Service(1)
  • 如何使用SaleSmartly进行Facebook Messenger 营销、销售和支持
  • 教资教育知识与能力中学教学
  • IDEA中使用Tomcat的两种方式:集成本地Tomcat使用Tomcat Maven插件
  • IP 地址的简介
  • 3D动作/动画特效
  • python 多线程编程之_thread模块
  • vue:vue2与vue3的区别
  • SQL数据库语法
  • 人机界面艺术设计
  • 【办公类-19-01-02】办公中的思考——Python,统计教职工的姓名中那些字最多?
  • HCIP实验1
  • 一个Bug让人类科技倒退几十年?
  • 2023王道考研数据结构笔记第四章串
  • 【AI绘图学习笔记】深度学习相关数学原理总结(持续更新)
  • CSGO服务器配置全贴纸插件方法教程
  • Python爬虫——使用socket模块进行图片下载
  • 通用游戏地图解决方案设计解析
  • java @Autowired @Resource @Inject 三个注解的区别
  • 「媒体分流直播」媒体直播和传统直播的区别,以及媒体直播的特点
  • 数据是如何在计算机中存储的
  • Day907.分区表 -MySQL实战
  • C++概览:工具链、基础知识、进阶及总结
  • 目标检测中回归损失函数(L1Loss,L2Loss,Smooth L1Loss,IOU,GIOU,DIOU,CIOU,EIOU,αIOU ,SIOU)
  • JOSN数据转换和解析
  • 浅析Linux内核中进程完全公平CFS调度
  • 安装 RustDesk 服务器 (适用 Rocky Linux, CentOS, RHEL 系列发行版)
  • 23种设计模式-策略模式