Linux 文件和目录操作函数
1.文件系统
1.1 文件存储
1.1.1 inode
本质:struct 结构体。存储文件的属性信息。如:权限、类型、大小、时间、用户、盘块位置
大多数的 inode 保存在磁盘中,少量常用、近期使用的 inode 保存在内存中
1.1.2 dentry 目录项
本质:struct 结构体 {文件名、inode 号 ...} 文件内容保存在盘块中
1.1.3 文件系统
一组规则,规定对文件的存储及读取的方式、方法。在磁盘格式化时指定。如:fat32、ntfs、ext2/3/4
2.文件操作
2.1 stat 和 lstat
功能:查看文件信息
#include <sys/stst.h>
struct stat statbuf; // 传入&statbuf用于接收文件属性信息
int stat(const char* pathname, struct stat* statbuf); // 会穿透符号链接(软连接)
int lstat(const char* pathname, struct stat* statbuf); // 不会穿透符号链接(软连接)
/*
pathname: 文件名
statbuf: 传出参数,充当返回值,保存文件属性信息 return: 成功0, 失败-1 errno
*/
- 文件大小:statbuf.st_size
- 文件类型:statbuf.st_mode
2.2 access
功能:测试指定文件是否具有某种属性
#include <unistd.h>
int access(const char *pathname, int mode);
/*
pathname:文件名
mode:文件权限,4种权限
R_OK: 是否有读权限
W_OK: 是否有写权限
X_OK: 是否有执行权限
F_OK: 测试文件是否存在 return:
0:有某种权限,或者文件存在
-1:没有,或文件不存在
*/
2.3 chmod
功能:修改文件权限
#include <sys/stat.h>
int chmod(const char *pathname, mode_t mode);
/*
参数:
filename:文件名
mode:权限(8进制数)
返回值:
成功:0
失败:-1
*/
2.4 chown
功能:修改文件所有者和所属组
#include <unistd.h>
int chown(const char *pathname, uid_t owner, gid_t group);
/*
参数:
pathname:文件或目录名
owner:文件所有者id,通过查看 /etc/passwd 得到所有者id
group:文件所属组id,通过查看 /etc/group 得到用户组id
返回值:
成功:0
失败:-1
*/
2.5 truncate
功能:修改文件大小
#include <unistd.h>
#include <sys/types.h>
int truncate(const char *path, off_t length);
/*
参数:
path:文件文件名字
length:指定的文件大小
a)比原来小, 删掉后边的部分
b)比原来大, 向后拓展
返回值:
成功:0
失败:-1
*/
2.6 symlink
功能:创建一个软链接
#include <unistd.h>
int symlink(const char *target, const char *linkpath);
/*
参数:
target:源文件名字
linkpath:软链接名字
返回值:
成功:0
失败:-1
*/
2.7 link
功能:创建一个硬链接
#include <unistd.h>
int link(const char *oldpath, const char *newpath);
/*
参数:
oldpath:源文件名字
newpath:硬链接名字
返回值:
成功:0
失败:-1
*/
2.8 unlink
功能:删除一个文件(软硬链接文件)
#include <unistd.h>
int unlink(const char *pathname);
/*
参数:
pathname:删除的文件名字
返回值:
成功:0
失败:-1
*/
- 调用unlink,只是让文件具备了被释放的条件,但不一定被立即释放
- 硬链接计数为0(没有dentry对应)的文件仍然不会被立刻释放,只有所有打开该文件的进程都结束后,系统才会择机释放该文件
3. 目录操作
3.1 opendir
#include <dirent.h>
DIR* opendir(const char* name);
// 根据相对或绝对路径得到目录指针
3.2 closedir
#include <dirent.h>
int closedir(DIR* dirp);
// 根据给定的目录关闭
3.3 readdir
#include <dirent.h>
struct dirent* readdir(DIR* dirp); struct dirent
{
ino_t d_ino; // 此目录进入点的inode
off_t d_off; // 目录文件开头至此目录进入点的位移
signed short int d_reclen; // d_name 的长度, 不包含NULL 字符
unsigned char d_type; // d_type 所指的文件类型
char d_name[256]; // 文件名
};
4.文件描述符复制
4.1 dup
功能:通过 oldfd 复制出一个新的文件描述符,新的文件描述符是调用进程文件描述符表中最小可用的文件描述符,最终 oldfd 和新的文件描述符都指向同一个文件。
#include <unistd.h>
int dup(int oldfd);
/*
参数:
oldfd : 需要复制的文件描述符 oldfd
返回值:
成功:新文件描述符
失败: -1
*/
应用举例
save_fd = dup(STDOUT_FILENO); // 拿到标准输出的文件描述符
write(save_fd, msg, strlen(msg)); // 数据会被写到屏幕
4.2 dup2
功能:把 参数1 的文件描述符覆盖到 参数2 的文件描述符,效果是 参数1 和 参数2 的文件描述符变成相同的
#include <unistd.h>
int dup2(int oldfd, int newfd);
/*
参数:
oldfd : 需要复制的文件描述符
newfd : 新的文件描述符,这个描述符可以人为指定一个合法数字(0 - 1023),如果指定的数字已经被占用(和某个文件有关联),此函数会自动关闭 close() 断开这个数字和某个文件的关联,再来使用这个合法数字。
返回值:
成功:返回 newfd
失败:返回 -1
*/

4.3 fcntl
int n = fcntl(fd, F_DUPFD, 18)
给定一个原先的文件描述符,然后给定一个新的文件描述符,复制进去。如果文件描述符的位置为空可以复制,不为空则分配一个可以分配的最小文件描述符
Linux 文件和目录操作函数的更多相关文章
- PHP 文件与目录操作函数总结
>>>文件操作 打开 fopen(); 打开文件 读取内容 fread(); 从文件指针 handle 读取最多 length 个字节 readfile(); 读入 ...
- Linux文件与目录操作 ls 命令(2)
说文件操作是最频繁地操作也不为过,在Linux中,使用ls命令可以列出当前目录中所有内容,本篇就先说说ls命令.本文所说的文件指文件和目录. ls命令常用选项 -a:显示指定目录下所有子目录与文件,包 ...
- linux 文件和目录操作
1 相对路径和绝对路径 (与C++中概念相似) cd /root/cat 绝对路径 cd ../文件名/ 相对路径,指相对某个文件而言的 2 切换目录 cd 当前目录 进入某个目录 pwd 显示当前 ...
- Linux文件与目录操作
1:目录操作指令 cd :切换目录 pwd:显示当前目录 mkdir:创建一个新目录 rmdir:删除一个空的目录rmdir -r:删除一个非空目录 . :此层目录 .. :上层目录 -:前一个工作目 ...
- Linux 文件、目录操作
Linux中的路径只能使用/,不能使用\ 或\\. cd 切换目录 cd / 切换到系统根目录,cd即change dir cd /bin 切换到根目录下的bin目录 cd .. ...
- Linux文件和目录操作管理命令
1.pwd:显示工作目录路径 -p:显示实际物理路径 -l:显示链接路径 2.cd:更改工作目录路径 cd:进入用户主目录 cd~:进入用户主目录 cd-:返回进入此目录之前所在的目录 cd..:返回 ...
- linux 文件 IO 目录操作及文件属性
///练习:实现列出某个目录中所有文件属性(文件大小,文件最后修改时间,文件名)//目录名由参数传入 ./dir /home/linux#include <sys/stat.h>#incl ...
- php文件和目录操作函数
文件:打开和关闭:fopen(), fclose()读:readfile(), file(), file_get_contents(), fgets(), fgetss(), fgetc()写:fwr ...
- php 文件、目录操作函数
目录 opendir readdir closedir mkdir rmdir : 只能删除空目录 文件 filetype filesize is_file basename dirname pat ...
- Linux 文件和目录操作 - cd - 切换目录
命令详解 重要星级: ★★★★★ 功能说明: cd 命令是 "change directory" 中每个单词的首字母缩写,其功能是从当前工作目录切换到指定工作目录. 语法格式: c ...
随机推荐
- 我的Vue之旅(4)
2020-10-26 使用v-bind来绑定class属性主要是分成了两类,即对象语法与数组语法,其实在数组中也是可以混用对象语法的,但在Demo3中我没有 写出来,有兴趣的话可以自己试试.在HTML ...
- ODOO14里面qweb使用案例
在ODOO里面中,通过QWeb来对模板进行渲染后加载到浏览器中,故作笔记以便于查询简介:Qweb被用作OpenERP的Web客户端模板引擎.它是一种基于XML的模板语言,同Genshi, Thymel ...
- CF1992E Novice's Mistake
CF1992E Novice's Mistake 同步于个人博客. Problem Noobish_Monk 有 \(n\in [1,100]\) 个朋友.每个朋友都给了他 \(a\in [1,100 ...
- 数栈运维案例:客户生产服务器CPU负载异常处理
本文整理自:袋鼠云技术荟 | 某客户生产服务器CPU负载异常处理 一.问题背景 一天下午,大家都在忙着各自的事情,突然小组人员都同时收到了短信提醒,以为是公司发奖金了,很是开心,咋一看"某某 ...
- Vue 结合Sortablejs实现table行排序
场景 在一个列表展示页面上,使用了表格组件,原有组件本身不支持拖拽功能,需求要求在列表的基础上支持行拖拽排序.因此引入了Sortablejs插件. 问题及解决方案 引入Sortablejs后刚开始都很 ...
- AWS S3文件存储服务器搭建(新)
之前写过一版 AWS S3文件存储服务器搭建 基本操作一样,只是在搭建 CloudFront 有点不同. 一:创建s3桶 AWS S3文件存储服务器搭建 二:使用自己的链接访问 1:申请Cloud ...
- Blazor学习之旅(4)数据共享
本篇,我们来了解下在Blazor中数据是如何共享的,组件之间又该如何传递参数. 关于Blazor组件 在 Blazor 中,从名为"组件"的自包含代码部分生成 UI.每个组件都可以 ...
- MongoDB入门实战教程(13)
MongoDB的一大特色就在于其原生的横向扩展能力,具体体现就是分片集.本篇,我们来了解一下MongoDB分片集的机制及其原理. 1 为什么要分片? 我们都知道,在关系型数据库如MySQL中,当数据量 ...
- (一)Qt与Python—PySide的简介及安装
目录 1.Pyside的简介 2.pyside的安装 3.pyside的Hello world程序 4.参考文献及网站连接 1.Pyside的简介 PySide(在本文中指代PySide2和PyS ...
- Asp.Net Core MVC 记住密码
https://www.cnblogs.com/Hmd528/p/10695156.html if (lm.RememberMe) { ...