linux内核系统调用创建和删除文件
一、创建文件
1、创建普通文件
int creat(const char *pathname, mode_t mode);
也可以使用open和openat创建普通文件:如果参数flags设置标志位O_CREAT,表示“如果文件不存在,创建文件”;如果参数flags设置标志位O_CREAT|O_EXCL,表示创建文件,如果文件已经存在,返回错误:
int open(const char *pathname, int flags, mode_t mode);
int openat(int dirfd, const char *pathname, int flags, mode_t mode);
2、创建目录
int mkdir(const char *pathname, mode_t mode);
int mkdirat(int dirfd, const char *pathname, mode_t mode);
3、创建符号链接
int symlink(const char *oldpath, const char *newpath);
int symlinkat(const char *oldpath, int newdirfd, const char *newpath);
4、mknod通常用来创建字符设备文件和块设备文件,也可以创建普通文件、命名管道和套接字:
int mknod(const char *pathname, mode_t mode, dev_t dev);
int mknodat(int dirfd, const char *pathname, mode_t mode, dev_t dev);
5、link用来创建硬链接,给已经存在的文件增加新的名称
int link(const char *oldpath, const char *newpath);
int linkat(int olddfd, const char *oldpath, int newdfd, const char *newpath);
glibc库封装了和上面的系统调用同名的库函数,还封装了创建命名管道的库函数:
int mkfifo(const char *pathname, mode_t mode);
库函数mkfifo是通过调用系统调用mknod来实现的。
创建文件需要在文件系统中分配一个索引节点,然后在父目录的数据中增加一个目录项来保存文件的名称和索引节点编号。因为各种文件系统类型的物理结构不同,所以需要提供索引节点操作集合的create方法。
二、删除文件
1、unlink用来删除文件的名称,如果文件的硬链接计数变成0,并且没有进程打开这个文件,那么删除文件。
int unlink(const char *pathname);
int unlinkat(int dirfd, const char *pathname, int flags);
2、删除目录
int rmdir(const char *pathname);
删除文件需要从父目录的数据中删除文件对应的目录项,把文件的索引节点的硬链接计数减1(一个文件可以有多个名称,Linux把文件名称称为硬链接),如果索引节点的硬链接计数变成0,那么释放索引节点。因为各种文件系统类型的物理结构不同,所以需要提供索引节点操作集合的unlink方法。
系统调用unlink和unlinkat都把主要工作委托给函数do_unlinkat,unlink传入特殊的文件描述符AT_FDCWD,表示“如果文件路径是相对路径,解释为相对调用进程的当前工作目录”:
fs/namei.c
SYSCALL_DEFINE3(unlinkat, int, dfd, const char __user *, pathname, int, flag)
{if ((flag & ~AT_REMOVEDIR) != 0)return -EINVAL;if (flag & AT_REMOVEDIR)return do_rmdir(dfd, pathname);return do_unlinkat(dfd, pathname);
}SYSCALL_DEFINE1(unlink, const char __user *, pathname)
{return do_unlinkat(AT_FDCWD, pathname);
}
linux内核系统调用创建和删除文件相关推荐
- 学习Linux二(创建、删除文件和文件夹命令)
学习Linux二(创建.删除文件和文件夹命令) 今天学习了几个命令,是创建.删除文件和文件夹的,在linux里,文件夹是目录,下面说下我学习的命令. 创建文件夹[mkdir] 一.mkdir命令使用权 ...
- Linux 学习之创建、删除文件和文件夹命令
今天学习了几个命令,是创建.删除文件和文件夹的,在linux里,文件夹是目录,下面说下我学习的命令. 创建文件夹[mkdir] 一.mkdir命令使用权限 所有用户都可以在终端使用 mkdir 命令在 ...
- Linux 学习之创建,删除文件和文件夹命令
https://blog.csdn.net/linjpg/article/details/77854671
- Linux 创建、删除文件夹
Linux 创建.删除文件夹 创建文件夹 创建aa文件夹,查看列表:可以看到已经有文件夹aa; mkdir aa 批量创建文件夹(bb cc dd),查看列表:可以看到有文件夹多了三个(bb cc d ...
- linux 下生成docx,linux下创建、删除文件和文件夹命令.docx
linux下创建.删除文件和文件夹命令.docx 还剩 6页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,喜欢就下载吧,价低环保! 内容要点: 学习 Linux 二(创建.删除文件和文件夹 ...
- Linux之创建、删除文件及目录命令touch、echo、mkdir、rm、rmdir
1. 创建.删除文件及目录命令的使用 命令 说明 touch 文件名 [可以没有后缀,默认为文本文件(没有后缀)] 创建指定文件 mkdir 目录名 创建目录(文件夹) rm 文件名或者目录名 ...
- linux命令 - ln - 创建和删除软、硬链接
linux命令 - ln - 创建和删除软.硬链接 在Linux系统中,内核为每一个新创建的文件分配一个Inode(索引结点),每个文件都有一个惟一的inode号.文件属性保存在索引结点里,在访问文件 ...
- linux内核中获取虚拟地址api,Linux内核-系统调用
Linux内核-系统调用 1.与内核通信 #系统调用在用户空间进程和硬件设备之间添加了一个中间层 作用:1.为用户空间提供了一种硬件的抽象接口 2.系统调用保证了系统的稳定和安全 3.出于每一个进程都 ...
- linux内核-系统调用execve()
读者在linux内核-系统调用fork.vfork与clone中已经看到,进程通常是按其父进程的原样复制出来的,在多数情况下,如果复制出来的子进程不能与父进程分道扬镳,走自己的路,那就没多大意义.所以 ...
最新文章
- 探索Julia(part2)--关于IDE
- if test 多条件_秒懂Python编程中的if __name__ == #39;main#39; 作用和原理
- css背景从左到右颜色渐变,CSS:linear-gradient()背景颜色渐变
- [恢]hdu 2317
- 树的非递归前中后序遍历
- vue 个人头像修改
- BioPython安装与入门
- 路由器、交换机、集线器
- 程序员那些必须熬过去的坎!!
- 揭秘大众点评的大数据实时计算
- 2020区块链行业回顾与前瞻
- Javascript代码优化的8个知识点,分享web前端资料
- 微信小程序 · 页面分享
- java项目-第61期基于ssm项目在线心理测评系统
- Redis数据库常用操作命令(查询db、key、value)
- cms php vue 开源_lucms - vue 与 Laravel 开发的后台管理系统
- 兔起鹘落全端涵盖,Go lang1.18入门精炼教程,由白丁入鸿儒,全平台(Sublime 4)Go lang开发环境搭建EP00
- 我在51CTO的路径
- 进入紧急救援模式下更改管理员密码
- 004-云E办_学习Oathu2和Spring Security Oauth2