欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 时评 > Linux应用开发-第三章Linux的目录IO

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

2024/10/24 15:16:17 来源:https://blog.csdn.net/Abcd_cnom/article/details/140181828  浏览:    关键词: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;
}

 实验结果

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com