Unix/Linux系统编程(文件编程与系统调用)
一.文件操作
1.文件操作级别
(1)硬件级别
硬件级别的文件操作包括:
fdisk:将硬盘、U盘或SDC盘分区。
mkfs:格式化磁盘分区,为系统做好准备
fsck:检查和维修系统
碎片整理:压缩文件系统中的文件
(2)操作系统内核中的文件系统函数:每个操作系统内核均可为基本文件操作提供支持
(3)系统调用:用户模式程序使用系统调用来访问内核函数
(4)I/O库函数
(5)用户命令:用户可以使用Unix/Linux命令来执行文件操作而不是编写程序
用户命令的示例如下:
mkdir,rmdir,cd,pwd,ls,link,unlink,rm,cat,cp,mv,chmod,etc.
每个用户命令实际上是一个可执行程序(cd除外),通常会调用库I/O函数,而库I/O函数再发出系统调用来调用相应的内核函数。
2.文件I/O操作
用户模式下的程序执行操作
FILE *fp=fopen("file" , "r");or FILE *fp = fopen("file" "w");
可以打开一个读/写文件流
二.使用系统调用进行文件操作
1.系统调用
在操作系统中,进程以两种不同的模式运行,即内核模式和用户模式,简称Kmode(系统态)和Umode(用户态)。在Umode中,进程的权限非常有限,它不能执行任何需要特殊权限的操作,特殊权限的操作必须在Kmode下执行。系统调用(简称syscall)是一种允许进程进入Kmode以执行Umode不允许操作的机制。
平常我们的进程几乎都是用户态,读取用户数据,当涉及到系统级别资源的操作(例如文件管理、进程控制、内存管理等)的时候,就要用到系统调用了。
2.使用系统调用进行文件操作
系统调用必须由程序发出。它们的用法就像普通函数调用一样。每个系统调用都是一个库函数,它汇集系统调用参数,并最终向操作系统内核发出一个系统调用。
3.常用的系统调用(参考链接:https://blog.csdn.net/qq_43412060/article/details/105460239)
4.链接文件(参考链接:https://blog.csdn.net/lelecastle/article/details/119843000)
硬链接(硬链接文件)
命令:ln oldpath newpath
硬链接仅适用于非目录文件
软链接(符号链接文件)
命令:ln -s oldpath newpath(创建从newpath到oldpath的软链接或符号链接)
与硬链接不同,软链接适用于任何文件,包括目录,通常在下面这两种情况下特别有用:
(1)通过一个较短的名称来访问一个经常使用的较长路径名称
例如:x——>aVeryLongPathnameFile
(2)将标准动态库名称链接到实际版本的动态库
例如:libc.so.6 ——> libc.2.7.so
当实际动态库更改为不同版本时,库安装程序只需更改(软)链接以指向新安装的库
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!