文件IO

文件IO

open()/creat()/close()/read()/write()/lseek()

 

文件IO可以操作普通的磁盘文件,也可以操作设备文件,Linxu专用。

 

文件操作一般步骤

打开文件

读写文件

关闭文件


#include<sys/types.h>

#include<sys/stat.h>

#include<fcntl.h>

 

int open(constchar *pathname, int flags);

int creat(constchar *pathname, mode_t mode);

int open(constchar *pathname, int flags, mode_t mode);


功能:

打开或者创建一个文件

参数:

const char*pathname 文件名字 ../test/123.c

int flags 标记

O_RDONLY:只读方式打开文件

O_WRONLY:可写方式打开文件

O_RDWR:读写方式打开文件

O_CREAT如果该文件不存在,就创建一个新的文件,并用第三的参数为其设置权限

O_EXCL:如果使用O_CREAT时文件存在,则可返回错误消息这一参数可测试文件是否存在

O_TRUNC:如文件已经存在,那么打开文件时先删除文件中原有数据

O_APPEND:以添加方式打开文件,所以对文件的写操作都在文件的末尾进行

mode 被打开文件的存取权限,为8进制表示法 0666 rw-rw-rw- 文件属性

【创建的文件的权限还收进程的创建文件掩码的影响】

https://wenku.baidu.com/view/fd0297ef0b4e767f5bcfce4c.html

 

umask 000 创建的文件权限都打开

返回值:

文件描述符,就是进程用来区分打开的文件的

失败 <0

0 1 2 被占用了, 分别stdin stdoutstderr

 


#include<unistd.h>

 

int close(intfd);


功能

关闭文件,缓冲区数据会推送到外部设备。

当一个进程终止时,该进程打开的所有文件都由内核自动关闭缓冲区的数据会自动推到外部设备或者硬盘中

关闭一个文件的同时,也释放该进程加在该文件上的所有记录锁。

参数

fd 文件描述符

 


#include<unistd.h>

 

ssize_t read(intfd, void *buf, size_t count);


功能

fd对应的文件中读取数据

参数

int fd 文件描述符

void *buf 读取的数据要存放的位置

size_t count 缓冲区大小

返回值

成功返回实际读取字节的个数

0 文件尾部

<0 出错

 


#include<unistd.h>

 

ssize_twrite(int fd, const void *buf, size_t count);


功能

向文件中写入数据

参数

int fd 文件描述符

const void *buf 要写入的数据对应的地址

size_t count 要写入数据的个数

返回值

成功实际写入字节的个数

失败<0

磁盘已满或者超过了一个给定进程的文件长度限制

 

 

打开一个文件的时候,默认是从文件头开始写数据,

如果open的时候增加了O_APPEND 这个flag

就会从文件尾开始读写

 


#include<sys/types.h>

#include<unistd.h>

 

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


功能

修改文件操作位置

参数

int fd

off_t offset 偏移量,负值:往前移动正值:往后移动

int whence

SEEK_SET:当前位置为文件的开头,新位置为偏移量的大小

SEEK_CUR当前位置为文件指针的位置,新位置为当前位置加上偏移量

SEEK_END:当前位置为文件的结尾,新位置为文件的大小加上偏移量的大小

返回值

成功就返回当前的位移

-1 出错文件头往前移动若干个字节,会报错

 

 

 


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值