Linux基础IO

打开文件:

int open(const char *pathlname, int flags);
int open(const char *pathname, int flags, mode_t mode);

第一个参数:路径名称(文件名),
第二个参数:标志位,本质是个整形数字,O_表示or ,flags是一个32位的整形,其中必须有且只有以下常数中的一个(必选项)
O_RDONLY----------只读打开
O_WRONLY---------只写打开
O_RDWR -----------可读可写打开
以下选项可指定0个或多个,和必选项按位或起来作为flags参数
O_APPEND--------------------追加至文件尾
O_CREAT----------------------若文件不在则创建,使用时需提供第三个参数,表示访问权限
O_EXCL------------------------若同时指定了O_CREAT,并且文件已存在,则出错返回
O_TRUNC---------------------若文件已存在,且以只写或可读可写方式打开,则将其长度截断为0字节
O_NONBLOCK----------------对于设备文件,以O_NONBLOCK方式打开可以做非阻塞I/O(Nonblock I/O)

读取文件:

ssize_t read(int fd, void *buf, size_t count);

read() 从文件描述符 fd 中读取 count 字节的数据并放入从 buf 开始的缓冲区中,如果 count 为零,read()返回0,不执行其他任何操作. 如果 count 大于SSIZE_MAX,那么结果将不可预料
成功时返回读取到的字节数(为零表示读到文件描述符)

写入文件:

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

write 向文件描述符 fd 所引用的文件中写入 从 buf 开始的缓冲区中 count 字节的数据. POSIX规定,当使用了write()之后再使用read(),那么读取到的应该是更新后的数据. 但请注意并不是所有的文件系统都是 POSIX兼容的
成功时返回所写入的字节数(若为零则表示没有写入数据)

关闭文件:

int close(int fd);

close 关闭一个文件描述符,使它不在指向任何文件和可以在新的文件操作中被再次使用,任何与此文件 相关联的以及程序所拥有的锁,都会被删除(忽略那些持有锁的文件描述符)假如fd是最后 一个 文件描述符与此资源相关联,则这个资源将被释放.若此描述符是最后一个引用到此文件上的,则文件用unlink删除
close 返回 0 表示 成功 , 或者 -1 表示 有 错误 发生

移动文件指针:

主要用来移动文件指针, 也有拓展文件,获取文件大小的功能
拓展文件:

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

offset------------------文件偏移量
whence----------------文件参照位置,有以下3个参数
SEEK_SET------------文件起始位置
SEEK_CUR-----------文件当前位置
SEEK_END-----------文件末尾
lseek 将以whence为基准偏移offset来扩展文件
lseek需配合write函数进行写入,才会真正扩展文件

获取文件大小
lseek(fd, 0, SEEK_END) 可以知道文件有多少个字节
od -tcx flie -----------以16进制显示二进制文件内容
od -tcd file-----------以10进制显示二进制文件内容

文件描述符与FILE结构体:

文件流指针和文件描述符的关系: 文件流指针结构体中包含了文件描述符的成员变量,PCB里有一个files_struct结构体指针,里面有一个文件描述符数组,记录了打开的文件描述符编号,(实际上是一个数组下标),它指向真正的文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值