一、实验说明
Linux系统调用是指操作系统提供给用户程序的一组“特殊接口”,用户程序可以通过这组“特殊”接口来获得操作系统提供的特殊服务。 Linux中的用户编程接口(API)遵循了UNIX中最流行的应用编程界面标准——POSIX。这些系统调用编程接口主要是通过C库(libc)实现的。
对内核而言,所有打开文件都由文件描述符引用。文件描述符是一个非负整数。当打开一个现存文件或创建一个新文件时,内核向进程返回一个文件描述符。当写一个文件时,用open或create返回的文件描述符标识该文件,将其作为参数传送给read或write。
二、实验内容
需要包含的头文件:<sys/types.h>, <sys/stat.h>, <fcntl.h> 函数原型:
功能:打开文件 返回值:成功则返回文件描述符,出错返回-1 参数:
pathname: 打开或创建的文件的全路径名 oflag:可用来说明此函数的多个选择项, 详见后。 mode:对于open函数而言,仅当创建新闻件时才使用第三个参数,表示新建文件的权限设置。
用open创建一个文件: open.c
需要包含的头文件:<unistd.h>
函数原型:
功能:从打开的文件中读取数据。 返回值:实际读到的字节数;已读到文件尾返回0,出错的话返回-1,ssize_t是系统头文件中用typedef定义的数据类型相当于signed int
参数: fd:要读取的文件的描述符 buf:得到的数据在内存中的位置的首地址 count:期望本次能读取到的最大字节数。size_t是系统头文件中用typedef定义的数据类型,相当于unsigned int
需要包含的头文件:<unistd.h> 函数原型:
功能:向打开的文件写数据 返回值:写入成功返回实际写入的字节数,出错返回-1。返回-1的常见原因是:磁盘空间已满,超过了一个给定进程的文件长度
参数: fd:要写入文件的文件描述符 buf:要写入文件的数据在内存中存放位置的首地址 count:期望写入的数据的最大字节数
read和write使用范例:
4. close
需要包含的头文件:<unistd.h> 函数原型:int close(int filedes) 功能:关闭一个打开的文件 参数:需要关闭文件的文件描述符
当一个进程终止的时候,它所有的打开文件都是由内核自动关闭。很多程序都使用这一功能而不显式地调用close关闭一个已打开的文件。 但是,作为一名优秀的程序员,应该显式的调用close来关闭已不再使用的文件。
每个打开的文件都有一个“当前文件偏移量”,是一个非负整数,用以度量从文件开始处计算的字节数。通常,读写操作都是从当前文件偏移量处开始,并使偏移量增加所读或写的字节数。默认情况下,你打开一个文件时(open),除非指定O_APPEND参数,不然位移量被设为0。
需要包含的头文件:<sys/types.h>, <unistd.h> 函数原型:
功能:设置文件内容读写位置 返回值:成功返回新的文件位移,出错返回-1;同样off_t是系统头文件定义的数据类型,相当于signed int 参数:
1.whence是SEEK_SET, 那么该文件的位移量设置为据文件开始处offset个字节
2.whence是SEEK_CUR, 那么该文件的位移量设置为当前值加offset。offset可为正或负
3.whence是SEEK_END, 那么该文件的位移量设置为文件长度加offset。offset可为正或负
三、心得体会
本次课程主要学习了Linux系统的文件IO,除了学习它的基本概念,最主要的是熟悉了基本 APIs,包括 open、close、read、write 函数。再观看了创客学院学习视频的基础上,实验楼的实验课程有效地巩固了视频内容。
学习时间 122分钟
操作时间 75分钟
按键次数 2510次
实验次数 3次
报告字数 2293字
是否完成 完成