标准io读写归纳总结
fputs和fgets最常用
文件定位
fseek ftell rewind
fseek
若从末尾开始向后偏移,则偏移多少,系统自动补零多少
示例:
ftell
示例:
rewind
示例:
练习:
复制文本文件内容
数一个文件里面字母a~z共出现多少次
完成图片的复制
文件io
介绍:
操作系统为了方便用户使用系统功能而对外提供的一组系统函数
称之为 系统调用(systemcall)
c库是为了通用(跨平台,linux,win ),而设计的函数接口。
systemcall 直接可以使用linux系统提供的功能。
c库是对 systemcall 的封装。c库的函数会调用systemcall中的函数。
啥文件都能操作,不分文本文件和二进制文件
#include <unistd.h> 的地位等同于 #include <stdio.h>
标准io 文件io的区别
1、文件io没有缓存区 , 文件io更适合操作 设备文件。
2、文件io操作对象不在是文件流指针,而是文件描述符(很小的非负的整数 0-1023 )
每个程序在启动的时候操作系统默认为其打开
三个描述符与流对象匹配:
0 >STDIN_FILENO = stdin
1 >STDOUT_FILENO == stdout
2 ==>STDERR_FILENO == stderr( 标准错误输出)
stdin,stdout,stderr,=>FILE*
标准io 文件io各功能对应
相关函数
open
若 flags 位有 O_CREAT 则 mode 位默认写0666
write
返回值若不是-1或者实际写入的个数:没写全
用write时 不要用sizeof算长度,这样的话只能4k、4k的读
若要读的对象是 15k = 3×4k + 3k,则最后3k
硬被写到4k了,则write后的文件变大了
所以针对write,要接收read的返回值
将该返回值放到write中大小的位置
read
lseek
知识点补充
1、a.out能打开的文件就只有1k(0~1023)(1024个)
2、在终端界面,输入指令ll
能写就是r,能读就是w,不可以就是-
从左至右权限人顺序:
作者 组成员
3、off_t:: long int 类型
4、stderr:判断错误输出
例如:
判断文件是否打开:
if (-1 == fd)
{
fprintf(stderr, "open error\n");
return 1;
}