I/O知识归纳

#常见文件操作函数
在这里插入图片描述
在这里插入图片描述
##open()函数
格式: file_object=open(file,[,mode],[,encoding=“utf-8”],[,buffering])
解释:

file_object—>open()返回的文件对象
file—>要打开的文件
mode—>指定模式:只读,写入,追加等等。表,一般默认为只读。
encoding—>指定文件编码,usually,“utf-8/GBK”
bufferint—>若设置为0,不会有寄存;设为1,访问文件时会寄存行;设为大于1的数,表明是寄存区的缓冲大小;设为负数,则寄存区的缓存区大小为系统默认。

其中flag参数具体为
#define O_RDONLY 00 /只读方式打开/
#define O_WRONLY 01 /只写方式打开/
#define O_RDWR 02 /读写方式打开/
oflag:打开文件时,可以传入多个参数选项,用下面的一个或多个进行“或”运算,构成flags; 其中:O_RDONLY—只读打开、 Q_WRONLY—只写打开、O_RDWR—读、写打开 ;这三个变量只能指定一个 ;O_CREAT—若文件不存在,则创建它。需要使用mode(文件权限标志)选项,来指明新文件的访问权限 ;O_APPEND—追加写
以下的常量是选用的,这些选项是用来和上面的必选项进行按位或起来作为flags参数。

O_APPEND 表示追加,如果原来文件里面有内容,则这次写入会写在文件的最末尾。
O_CREAT 表示如果指定文件不存在,则创建这个文件
O_EXCL 表示如果要创建的文件已存在,则出错,同时返回 -1,并且修改 errno 的值。
O_TRUNC 表示截断,如果文件存在,并且以只写、读写方式打开,则将其长度截断为0。
O_NOCTTY 如果路径名指向终端设备,不要把这个设备用作控制终端。
O_NONBLOCK 如果路径名指向 FIFO/块文件/字符文件,则把文件的打开和后继 I/O设置为非阻塞模式(nonblocking mode)

##文件描述符fd
文件描述符fd
 文件描述符在形式上 是一个非负整数。它是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符。在程序设计中,一些涉及底层的程序编写往往会围绕文件描述符展开。

习惯上,标准输入(standard input)的文件描述符是 0,标准输出(standard output)是 1,标准错误(standard error)是 2。
0,1,2对应的物理设备一一般是:键盘,显示器,显示器。
所以通常当我们成功打开文件时,返回的fd都是从3起

##close函数
close函数用于关闭一个已经打开的文件。函数原型如下:
int close(int filedes)
返回值:若成功则返回0,出错则返回-1
参数:filedes是文件标识符,是通过open函数获得的文件标识符。

说明:

当一个进程终止时,内核会自动关闭它所有打开的文件。所以close函数可以不用。不过最好在完成文件的操作后及时关闭文件,以释放文件,否则其他需要操作该文件的进程会因不能打开文件而失败。

##write函数
write函数用于向打开的文件写入数据。函数原型如下:

#include <unistd.h>
ssize_t write(int filedes, const void *buf, size_t nbtyes);

返回值:如果写成功则返回实际写入的字节数,若出错则返回-1。
参数:

1、filedes 文件标识符,由调用open函数从内核获得。

2、*buf 待写入数据的缓冲区地址。

3、nbytes 需要写入文件的数据字节数。

write函数与read函数基本相同,但write函数除非出错,否则返回值等于要写的字节数nbtyes。

在调用write函数之前要做两件事:

1、用open函数打开文件,获得文件标识符和写操作权;

2、要调用lseek定位要写入数据的位置。

##dup与dup2函数
dup函数复制现有的文件描述符

#include <unistd.h>

int dup (int oldfd);
int dup2 (int oldfd, int newfd);

返回值:成功返回新的文件描述符否则出错返回-1;

区别:dup新的文件描述符由系统创建, dup2新的文件描述符由自己指定,若新文件描述符存在且与旧的描述符相等则不关闭,新文件描述符若相等则先关闭newfd再打开,函数返回新旧文件描述符指向
dup():
不能指定新的文件描述符,系统自己分配一个最小的可用的文件描述符
dup2():
可以用参数2指定新的文件描述符
如果fd2已经打开,则先将其关闭
如果fd等于fd2,那么dup2函数不执行任何操作,dup2函数返回fd2,而不关闭它
否则fd2的FD_CLOEXEC文件描述符标志就被清除,这样fd2在进程调用exec时是打开状态

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值