1.缓冲区
1. 1行缓冲(Line Buffered)
应用场景:主要用于与终端(terminal)的交互,如stdout
(标准输出)通常就是行缓冲的。
缓冲区大小:通常不是固定的,但可以通过系统或库函数设置。
刷新条件:
遇到换行符(\n
)时刷新。
缓冲区满时刷新(尽管对于行缓冲来说,这个条件通常不会触发,因为换行符会提前触发刷新)。
程序正常或异常结束时刷新。
显式调用fflush(stdout);
刷新。
1.2.全缓冲(Fully Buffered)
应用场景:主要用于文件的读写,如通过fopen
打开的文件流。
缓冲区大小:通常是4096字节(4K),但也可以通过系统或库函数设置。
刷新条件:
缓冲区满时刷新。
程序正常或异常结束时刷新。
显式调用fflush(fp);
(其中fp
是指向文件流的指针)刷新。
1.3 无缓冲(Unbuffered)
应用场景:主要用于需要立即输出的情况,如stderr
(标准错误输出)通常是无缓冲的,以便及时显示错误信息。
缓冲区大小:0字节,即不进行缓冲,直接输出。
刷新条件:由于不进行缓冲,因此每次输出操作都会直接刷新到目标设备
2. fseek
- 作用:在文件流中移动文件指针到指定的位置。
- 原型:
int fseek(FILE *stream, long offset, int origin);
- 参数:
stream
:指向FILE
对象的指针,表示文件流。offset
:要移动的字节数,可以是正数或负数。origin
:起始位置的基准点(SEEK_SET
、SEEK_CUR
、SEEK_END
)。
- 返回值:成功时返回0,失败时返回非0值。
3. ftell
- 作用:获取当前文件指针相对于文件开始位置的偏移量。
- 原型:
long ftell(FILE *stream);
- 参数:
stream
,指向FILE
对象的指针。 - 返回值:文件指针的当前偏移量,失败时返回-1L。
4. rewind
- 作用:将文件指针重新定位到文件的开头,并清除错误和文件结束标志。
- 原型:
void rewind(FILE *stream);
- 参数:
stream
,指向FILE
对象的指针。 - 返回值:无返回值。
5. open
- 作用:打开或创建文件,返回文件描述符。
- 原型:
int open(const char *pathname, int flags, mode_t mode);
- 参数:
pathname
:文件路径。flags
:文件打开模式(如O_RDONLY
、O_WRONLY
、O_RDWR
等)。mode
:创建新文件时的权限(使用O_CREAT
时)。
- 返回值:成功时返回文件描述符,失败时返回-1。
6. read
- 作用:从文件描述符指向的文件中读取数据。
- 原型:
ssize_t read(int fd, void *buf, size_t count);
- 参数:
fd
:文件描述符。buf
:存储读取数据的缓冲区。count
:要读取的最大字节数。
- 返回值:成功时返回读取的字节数,到达文件末尾时返回0,失败时返回-1。
7. write
- 作用:向文件描述符指向的文件中写入数据。
- 原型:
ssize_t write(int fd, const void *buf, size_t count);
- 参数:
fd
:文件描述符。buf
:包含要写入数据的缓冲区。count
:要写入的字节数。
- 返回值:成功时返回写入的字节数,失败时返回-1。
8. lseek
- 作用:移动文件描述符指向的文件中的读写位置。
- 原型:
off_t lseek(int fd, off_t offset, int whence);
- 参数:
fd
:文件描述符。offset
:偏移量。whence
:起始位置的基准点(SEEK_SET
、SEEK_CUR
、SEEK_END
)。
- 返回值:成功时返回新的文件偏移量,失败时返回
(off_t)-1
。