C语言低级I/O(UNIX接口)

  • 头文件说明

以下各函数均在<unistd.h>中 

flags的各个值定义于<fcntl.h>

BUFSIZ定义于<stdlib.h>中 (似乎<stdio.h>中也有)
  • 打开或创建文件
int open(char *filename, int flags, int perms);
int creat(char *name, int perms);
flags 在linux中定义在 <fcntl.h>
主要值有三个 O_RDONLY  O_WRONLY  O_RDWR
perms即unix文件权限,用三位八进制数表示,比如0666 0755
对于open,perms填0就可以读取(就目前所知)

 open打开一个不存在的文件会出错

而creat创建一个不存在的文件不会出错
open和creat如果成功的打开文件会返回 文件描述符,否则返回 -1

 操作系统默认的三个文件操作符 0 1 2

分别代表stdin stdout stderr

  •  关闭文件与删除文件

int close(int fd);

用于断开与文件的链接 释放文件描述符

 int unlink(char *filename);

用于删除文件

 close和unlink若执行成功则返回 0, 否则返回 -1

  •  读取文件与写入文件

 int read(int fd, char *buf, int n );

int write(int fd, char *buf, int n);
buf是缓冲区
可以是一个数组名, 也可以时char指针, 还可以是 &c (即一个char变量的地址, 不过此时每次只能传输一位)
n为每次要传输的字节数(并不一定为真实传输的字节数)
n如果很小,则需要频繁读取,会大大降低操作效率
因此n大小需要合适,(BUFSIZ 定义于stdlib.h文件中,对于所用操作系统是一个比较合适的值)
read和write的返回值均为真实传输的字节数
read和write都会在上次文件操作之后的位置开始操作
若需要在文件中移动,需要用下面的lseek函数
  •  游标移动
int lseek(int fd, long offset, int origion);
lseek可以在文件中随意移动而不会修改文件内容
其中offset是相对于origin移动的距离
offset是可以为负值的 比如-10L (注意offset为long 因此需加上L或l)
origin可以为 0 1 2
分别代表文件头 当前位置 文件尾

转载于:https://www.cnblogs.com/liupy/p/8819749.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值