2024年4月29日发(作者:)

Linux 文件与I/O操作

Linux 文件与I/O操作

Andrew Huang

课程内容

l 系统调用

l 底层库函数

l 标准库函数

l 目录与文件维护

系统调用

l

Linux 大部分的系统功能是通过系统调用(System Call)来实现的.如open,send之类.

l

这些函数在C程序调用起来跟标准C库函数(printf…)非常类似.但是实现机制完全不同.

l

库函数仍然是运行在Linux 用户空间程序.很多时候内部会调用系统调用.

l

但系统调用是内核实现的.在C库封装成函数.但通过系统软中断进行调用.

– 用time命令测试时间,系统时间实际就是系统调用时间累积

l

time ./demo1

– 用strace 可以跟踪一种程序系统调用使用情况

l

strace ./demo1 #不需要调试信息

两者关系

l 可以参考C库函数malloc与系统调用sbrk的关系

PDF 文件使用 "pdfFactory" 试用版本创建

Linux 文件与I/O操作

常见C标准库函数

l printf,getch,scanf

l strcpy,strcmp,strlen

l memcpy,memcmp,memset

l fopen,fwrite,fread

常见系统调用函数

l 进程控制:fork(),waitpid()

l 文件控制open(),write()

l 网络收发函数 socket(),bind(),send(),write()

l 权限控制 access()

l 标准C的函数,应该在MSDN和Linux下的man都能同时查找联机帮助

并且声明定义在stdlib.h当中

l 而Linux系统调用只能用man查找相应帮助

大部分声明定义在unistd.h当中

文件控制

1. Linux文件结构

l Linux环境中的文件具有特别重要的意义,因为它们为操作系统服务和设备提供了一个简

单而统一的接口.在Linux中,一切(或几乎一切)都是文件。

l 通常程序完全可以像使用文件那样使用磁盘文件、串行口、打印机和其他设备。

l 大多数情况下,你只需要使用五个基本的函数——open、close、read、write和ioctl

l Linux中的任何事物都可以用一个文件代表,或者可以通过特殊的文件进行操作。

l 一些特殊文件

目录

设备文件

/dev/console

/dev/tty

/dev/null

2. 底层库函数

l

Linux 在底层实现一整套处理文件函数.

– 这一些函数能处理普通文件,网络socket文件,设备文件等

– 全部是系统调用实现的函数

l

文件处理函数

– open – 打开或创建一个文件

– creat – 建立一个空文件

– close – 关闭一个文件

– read – 从文件读入数据

– write – 向文件写入一个数据

– lseek – 在文件中移动读写位置

PDF 文件使用 "pdfFactory" 试用版本创建