ftell(fp):用于返回从文件开头到流指针的当前位置。一般以开头到当前流指针的字符串个数为返回值。
rewind()用于将流指针定位到文件开头。
返回成功返回值为1,失败为-1.
feof(fp):判断文件是否读到末尾:读到文件末尾返回1,没到文件末尾返回0;
缓冲区:
1.为什么设置缓冲区?因为不同设备之间的读写速度不一致,为了提高操作系统的效率,所以设置缓冲区减小设备速度不同带来的效率低下的问题。
2缓冲区分类。分为行缓冲区和全缓冲区以及无缓冲区。
行缓冲区的刷新条件有 :
1.遇到\n,缓冲区刷新。
2.缓冲区满缓冲区会刷新。
3.程序结束,缓冲区会刷新。
4.fflush(stdout)可以直接将缓冲区中数据刷新到屏幕。
全缓冲区的刷新条件:
1.缓冲区满会刷新。
2.程序结束会刷新。
3.遇到fflush(fp)会刷新。
无缓冲区:主要用于出错信息的输出。fprintf(stderr," ");
行缓冲区的大小为1k,全缓冲区的大小为4k.行缓冲区主要用于将数据刷新到屏幕,全缓冲区主要将数据刷新到文件。
文件io:
文件io没有缓冲区机制。
操作的对象不是流对象,而是文件描述符。int 0~1023.最多同时打开1024个文件。内核每打开一个文件,就会给文件分配一个文件描述符。
每个程序在启动时,系统会自动将0,1,2这三个文件描述符分配给stdin,stdout,stderr.
系统的操作文件函数:
open()、close()、read(),write().
若open()选择参数O_CREAT时,需要在后面写上文件权限。如:0666.(0表示后面是以8进制表示),函数的返回值为int类型,表示文件描述符。
read(fd,s,size_t):表示从fd读数据到s中,数据的大小为size_t,返回值成功为读到的数据个数,失败为-1.
write(fd,s,size_t):表示向fd中写数据,数据来自s,写入数据的大小为size_t,返回值成功为写入的个数。失败为-1.
lseek()和fseek()函数类似。只不过fseek()的返回值成功为0,失败为-1.而lseek()函数的返回值成功为从文件开头到定位到位置的字符个数。失败返回-1.