APUE第三章 文件I/O

这篇博客详细介绍了Unix系统中的文件I/O操作,包括使用open, read, write, lseek, close五个基本函数进行不带缓冲的I/O。文件描述符用于引用打开的文件,0, 1, 2分别代表标准输入、输出和错误。open和openat函数的使用,以及create函数与open的等效性。同时,讨论了close函数关闭文件时释放锁以及进程结束时自动关闭文件的行为。最后,解释了lseek在管道中的应用情况。" 50324255,5537127,岭回归与偏最小二乘法在回归分析中的应用,"['机器学习', '统计学', '预测模型', '线性回归', '特征工程']
摘要由CSDN通过智能技术生成

3.1 引言

Unix系统中的大多数文件I/O只需用到5个函数

  1. open
  2. read
  3. write
  4. lseek
  5. close

不带缓冲的I/O 指的是每个read和write都调用内核中的一个系统调用。

3.2 文件描述符

所有打开的文件都通过文件描述符引用。文件描述符是一个非负整数。
Unix系统shell以及很多应用程序的惯例:

  • 0–标准输入–STDIN_FILENO
  • 1–标准输出–STDOUT_FILENO
  • 2–标准错误–STDERR_FILENO

3.3函数open和openat

#include <fcntl.h>

int open(const char *path,int oflag,.../*mode_t* mode/);
int open(int fd,const char *path,int oflag,.../*mode_t* mode/);

由open和openat函数返回的文件描述符一定是最小的未用描述符数值。

3.4 函数create

#include <fcntl.h>
int create(const char *path,mode_t mode);

该函数与

open(path,O_WRONLY|O_CREATE|O_TRUNC,mode);

等效。

3.5 函数close

#include <unistd.h>
int close(int fd)

关闭一个文件时会释放该进程加在文件上的所有记录锁。
进程终止时,内核自动关闭它所有的打开文件。

3.6 函数lseek

#include <unistd.h>

off_t lseek(int fd,off_t offset,int whence);

对示例中第二个调用的解释:

$ cat < /etc/passwd | ./ a.out
cannot seek

代码中的|是Unix系统中的管道符号,表示把一个程序的输出作为标准输入传递给另一个程序。由于传入a.out的是一个管道,所以lseek返回-1。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值