fseek和fread
时间: 2024-08-14 08:04:41 浏览: 46
`fseek()` 和 `fread()` 是 C 语言标准库中的两个文件操作函数,它们分别用于定位文件指针和读取数据。
**fseek() 函数:**
`fseek(file, offset, whence)` 的作用是设置文件指针(file pointer)的位置。参数说明如下:
- `file`: 指向要操作的文件的文件描述符(file descriptor)。
- `offset`: 需要移动的字节偏移量,可以是一个整数或 long 类型的值。
- `whence`: 定位基准点,有三种选项:
- SEEK_SET: 从文件开始位置(默认)。
- SEEK_CUR: 相对于当前位置。
- SEEK_END: 从文件末尾开始。
这个函数返回的是新文件指针的位置,如果发生错误则返回 `-1`。
**fread() 函数:**
`fread(buffer, size, count, file)` 用于从指定文件中读取数据到内存缓冲区。参数含义如下:
- `buffer`: 一个指向存储数据的内存区域的指针。
- `size`: 单个元素的大小,通常为 sizeof(类型)。
- `count`: 需要读取的元素数量。
- `file`: 文件描述符,表示要读取的文件。
这个函数会从文件读取指定数量和类型的元素,并将其复制到缓冲区中。如果成功读取所有数据,返回实际读取的元素数量;否则返回 0,可能表示到达文件结束或者出现错误。
**使用示例:**
```c
#include <stdio.h>
int main() {
FILE *fp = fopen("test.txt", "r+b"); // 打开文件
if (fp == NULL) {
perror("Could not open the file");
return 1;
}
// 使用 fseek 设置指针到文件的特定位置
fseek(fp, 10, SEEK_SET); // 移动到第10个字节位置
// 使用 fread 读取数据到缓冲区
char buffer;
int bytesRead = fread(buffer, sizeof(char), 5, fp);
if (bytesRead > 0) {
printf("Read %d bytes at position 10: ", bytesRead);
for (int i = 0; i < bytesRead; i++) {
printf("%c ", buffer[i]);
}
} else {
perror("Reading failed");
}
fclose(fp); // 关闭文件
return 0;
}
```
阅读全文