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

Linux应用开发-第三章Linux的目录IO

 一、目录IO和文件IO的对比

目录IO文件IO
opendir 打开目录open 打开文件
mkdir 创建目录
readdir 读目录read 读文件
closedir 关闭目录close 关闭文件

区别:文件IO和提到过的标准IO都是对文件操作,目录IO都是对目录的操作

二、目录IO具体函数

2.1 mkdir函数

函数介绍

/*#include <sys/stat.h>#include <sys/types.h>int mkdir(const char *pathname, mode_t mode);作用:创建一个目录参数:pathname: 创建的目录的路径mode: 权限,八进制的数返回值:成功返回0, 失败返回-1
*/

 实验:实验mkdir去创建一个aaa目录,权限是0777(因为是8进制,前面需要加0)

 实验代码

#include <sys/stat.h>
#include <sys/types.h>
#include<stdio.h>
int main(){int ret=mkdir("aaa", 0777);//这里虽然是0777(8进制),但是最终的权限是mode & ~umask & 0777
//做一个权限的消除,保证安全if (ret<0){perror("mkdir");return -1;}return 0;
}

 实验现象

 2.2 rename函数

实验目的:我们把上一节创建的aaa目录改成bbb目录

 代码

#include <stdio.h>
/*实验目的:我们把上一节创建的aaa目录改成bbb目录*/int main(){int ret=rename("aaa", "bbb");if (ret<0){perror("rename");return -1;}return 0;
}

 实验现象

 2.3 chdir函数和getcwd函数

/*#include <unistd.h>int chdir(const char *path);作用:修改进程的工作目录比如在/home/nowcoder 启动了一个可执行程序a.out, 进程的工作目录 /home/nowcoder参数:path : 需要修改的工作目录#include <unistd.h>char *getcwd(char *buf, size_t size);作用:获取当前工作目录参数:- buf : 存储的路径,指向的是一个数组(传出参数)- size: 数组的大小返回值:返回的指向的一块内存,这个数据就是第一个参数*/

 实验目的:获取当前的工作目录后再修改当前的工作目录

 代码

#include <unistd.h>
#include<stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>/*实验目的:获取当前的工作目录后再修改当前的工作目录*/
int main(){//获取当前的工作目录char buf[128];getcwd(buf,sizeof(buf));printf("当前的工作目录是:%s\n",buf);//修改工作目录int ret=chdir("/home/book/Linux/lesson13");//修改当前目录到指定目录,我们当前的目录是lesson14if(ret == -1) {perror("chdir");return -1;} /*我们怎么样去判断我们切换路径有没有成功,就在lesson13目录下创建一个文件此时lesson13目录下为空*/int fd=open("chdir.txt", O_CREAT | O_RDWR, 0664);if(fd == -1) {perror("open");return -1;}//关闭刚刚创建的文件close(fd);//再次获取当前的工作路径char buf1[128];getcwd(buf1,sizeof(buf1));printf("修改后的工作目录是:%s\n",buf1);return 0;
}

 实验结果

相关文章:

  • 【Android】构建 Android Automotive OS:适合初学者的指南
  • 一文带你入门机器学习聚类算法
  • Owl 中的 Props 概述
  • 20240705 每日AI必读资讯
  • # windows 安装 mysql 显示 no packages found 解决方法
  • 使用 pyecharts 渲染成图片程序报错: echarts is not defined问题处理
  • SQL面试题练习 —— 求连续段的起始位置和结束位置
  • 51单片机第18步_将TIM0用作13位定时器
  • claude3.5写作——《基于灰色预测的中国人口数量预测》
  • 分页联合查询实现方法(Java)
  • 数据库表导出到excel
  • 数据库主从复制
  • 第5章:软件工程
  • 在window上搭建docker
  • 实验一 MATLAB \ Python数字图像处理初步
  • [ JavaScript ] 数据结构与算法 —— 链表
  • [ 一起学React系列 -- 8 ] React中的文件上传
  • 【跃迁之路】【733天】程序员高效学习方法论探索系列(实验阶段490-2019.2.23)...
  • 0基础学习移动端适配
  • 345-反转字符串中的元音字母
  • angular2 简述
  • chrome扩展demo1-小时钟
  • css的样式优先级
  • Docker: 容器互访的三种方式
  • ES6--对象的扩展
  • fetch 从初识到应用
  • JSDuck 与 AngularJS 融合技巧
  • log4j2输出到kafka
  • Spring声明式事务管理之一:五大属性分析
  • 大主子表关联的性能优化方法
  • 仿天猫超市收藏抛物线动画工具库
  • 排序算法学习笔记
  • 如何打造100亿SDK累计覆盖量的大数据系统
  • 如何邀请好友注册您的网站(模拟百度网盘)
  • 赢得Docker挑战最佳实践
  • NLPIR智能语义技术让大数据挖掘更简单
  • ​埃文科技受邀出席2024 “数据要素×”生态大会​
  • ​如何在iOS手机上查看应用日志
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (3)(3.2) MAVLink2数据包签名(安全)
  • (C语言)共用体union的用法举例
  • (void) (_x == _y)的作用
  • (二)构建dubbo分布式平台-平台功能导图
  • (二刷)代码随想录第16天|104.二叉树的最大深度 559.n叉树的最大深度● 111.二叉树的最小深度● 222.完全二叉树的节点个数
  • (附源码)计算机毕业设计ssm高校《大学语文》课程作业在线管理系统
  • (数位dp) 算法竞赛入门到进阶 书本题集
  • (提供数据集下载)基于大语言模型LangChain与ChatGLM3-6B本地知识库调优:数据集优化、参数调整、Prompt提示词优化实战
  • (转)使用VMware vSphere标准交换机设置网络连接
  • ***汇编语言 实验16 编写包含多个功能子程序的中断例程
  • ***微信公众号支付+微信H5支付+微信扫码支付+小程序支付+APP微信支付解决方案总结...
  • ../depcomp: line 571: exec: g++: not found
  • .mysql secret在哪_MySQL如何使用索引
  • .NET C# 使用GDAL读取FileGDB要素类
  • .NET Project Open Day(2011.11.13)