首页 > 运维 > linux运维 > 正文

linux文件系统

雪夜
发布: 2025-07-23 09:06:30
原创
401人浏览过

目录

C语言文件操作:

Linux文件系统调用:

open:

标志位传参:

虚拟文件系统:

write:

close:

跨平台性:


C语言文件操作:首先,让我们简要回顾一下C语言中的文件操作,包括fopen、fread、fwrite、fclose等函数。我们在Linux环境下编写一些简单的代码来实践:

linux文件系统关于这些函数的使用方法,可以参考www.cplusplus.com网站,这里不再详细说明。我们运行一下看看:

linux文件系统理解文件:

在编写程序时,我们并没有直接修改、打开和关闭文件,而是在生成可执行文件后,运行该文件时,文件才会被打开、修改和关闭。

Linux文件系统调用:在Linux中,我们还可以通过系统调用来操作文件,让我们来认识几个系统调用接口:

open:首先,我们在Linux下查看这个函数的系统调用手册:

linux文件系统我们重点介绍一下标志位传参:

标志位传参:先说说它的作用:通过位图,使用一个参数位置,可以传入多个选项,从而实现不同的功能。在C语言的fopen中,我们可以以读取、写入、追加等方式打开文件,这些都是选项。那么,这个open函数如何传递选项呢?没错,就是通过这个标志位:

linux文件系统现在你可能有两个问题:

巧文书
巧文书

巧文书是一款AI写标书、AI写方案的产品。通过自研的先进AI大模型,精准解析招标文件,智能生成投标内容。

巧文书 61
查看详情 巧文书

1,open手册里,明明要求传一个int,为什么要传O_WRONLY|O_CREAT这一串东西?

2,为什么中间有个|,也就是按位或操作?

首先回答第一个问题,敏感的同学可能已经发现了,这些都是大写字母,不难猜出它们是宏,被定义成了整数。

第二个问题,我现在编写一个标志位传参的函数来解释:

linux文件系统运行一下看看:

linux文件系统你可以自己模拟一下这个代码的运行流程,它巧妙地运用了位图和位操作,通过传递一个参数实现多种功能。

虚拟文件系统:回到open函数,可以注意到之前的代码,open函数有一个返回值,这个返回值是文件的文件标识符。一个进程可能会打开多个文件,当一个文件被打开时,会创建一个struct file来描述这个文件。当一个进程被创建时,会生成一个task_struct结构体,这个结构体中会存放一个指针struct files_struct* files,这个指针指向一个数组,这个数组存放了所有被打开文件的struct file的指针。open的返回值就是该文件的struct file在该数组中的下标,也称为文件描述符。上述内容可以理解为下图:

linux文件系统struct file中存储了文件的内核级缓冲区和操作底层方法的指针表,用来对磁盘中的文件进行修改。

这套文件系统被称为虚拟文件系统。

因此,我们的操作系统在对文件进行操作时,只认文件描述符fd!!!

write:linux文件系统这里传fd的作用,想必不需要我多讲了,这个函数的功能应该很明显了。

close:linux文件系统这个更简单了,只需传递需要关闭的文件的文件描述符即可。

现在我们将最开始的C语言文件操作代码,改成使用系统调用的形式:

linux文件系统跨平台性:那么问题来了,Linux系统中已经有了系统调用的文件操作,为什么C语言还要提供fwrite、fopen等文件操作函数呢?直接使用Linux中的系统调用不好吗?

主要是为了提高代码的可移植性和跨平台性。在Linux中,系统调用是open,但在Windows中,系统调用可能不同。因此,C语言不得不这样做。而且,C语言的fopen等函数内部肯定封装了Linux系统调用的open和文件描述符,因为Linux只认文件描述符。

以上就是linux文件系统的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号