linux课件:文件处理
件:unistd.h 功能 — 将与文件描述符fildes相关联的文件中的前nbytes个字节读入到buf中。 原型:ssize_t read(int fildes, void *buf, size_t nbytes); — fildes:文件描述符。 — buf:数据的目标地址。 — nbytes:数据的长度(以字节为单位)。 — 返回值:读取成功,返回值的范围0~nbytes;不成功,返回-1,对应错误代码保存在全局变量errno中。 read系统调用举例 例程: ```c #include <stdio.h> #include <unistd.h> int main() { char buffer[100]; ssize_t bytes_read = read(0, buffer, sizeof(buffer)-1); // 从标准输入读取数据 if (bytes_read > 0) { buffer[bytes_read] = '\0'; // 确保字符串以null结尾 printf("Read from stdin: %s\n", buffer); } else { printf("Error reading from stdin: %d\n", errno); } return 0; } ``` open系统调用 系统调用名:open 头文件:fcntl.h 功能 — 打开或创建一个文件,并返回一个文件描述符。 原型:int open(const char *pathname, int flags); — pathname:要打开的文件路径。 — flags:指定文件的打开模式,如只读、写入、创建等。 — 返回值:成功则返回一个非负整数作为文件描述符;失败则返回-1,错误代码保存在errno中。 close系统调用 系统调用名:close 头文件:unistd.h 功能 — 关闭一个文件描述符,释放与之相关的系统资源。 原型:int close(int fildes); — fildes:要关闭的文件描述符。 — 返回值:成功返回0,失败返回-1,错误代码保存在errno中。 ioctl系统调用 系统调用名:ioctl 头文件:fcntl.h 功能 — 对文件描述符执行设备相关的输入/输出控制操作。 原型:long ioctl(int fildes, unsigned long request, ...); — fildes:文件描述符。 — request:请求类型,决定具体的控制操作。 — ...:可变参数,根据request的不同可能需要额外的参数。 — 返回值:成功返回0,失败返回-1,错误代码保存在errno中。 标准I/O库 标准I/O库提供了高级别的文件读写功能,比系统调用更易于使用且具有更好的跨平台兼容性。常见的函数有: — fopen:打开一个文件。 — fclose:关闭一个文件。 — fread:从文件读取数据。 — fwrite:向文件写入数据。 — fflush:刷新缓冲区。 — fseek:移动文件指针。 — fgetc、getc、getchar:从文件读取字符。 — fputc、putc、putchar:向文件写入字符。 — fgets、gets:从文件读取一行文本。 — printf、fprintf、sprintf:格式化输出。 — scanf、fscanf、sscanf:格式化输入。 Linux文件结构 Linux使用树状结构组织文件系统,根目录'/'位于树的顶部。常见目录及其作用如下: — /:根目录,所有文件系统的起点。 — /proc:包含当前运行进程的信息。 — /etc:配置文件存放目录。 — /boot:启动文件存放目录。 — /bin:存放基本命令的二进制文件。 — /root:超级用户(root)的主目录。 — /home:普通用户的主目录。 — /etc:配置文件存放目录。 — /dev:设备文件存放目录。 总结 在Linux中,文件和设备均被视为文件系统的一部分,通过统一的接口进行操作。系统调用如read、write、open、close和ioctl允许应用程序直接与内核交互,而标准I/O库提供了更高级别、更易用的文件操作接口。理解Linux的文件结构和这些操作对于开发基于Linux的应用程序至关重要。然而,直接使用系统调用可能会带来性能开销,因此在实际编程中,通常通过标准I/O库等中间层进行操作,以提高效率和简化编程复杂度。
剩余96页未读,继续阅读
- 粉丝: 1
- 资源: 12
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助