【发布时间】:2019-04-28 13:01:37
【问题描述】:
我正在用 C 编写一个学术项目,我只能使用 <fcntl.h> 和 <unistd.h> 库来进行文件操作。
我有逐行读取文件的功能。算法是:
- 在文件开头设置指针并获取当前位置。
- 以恒定大小将数据读取到缓冲区 (
char buf[100]),逐字符迭代并检测行尾'\n'。 - 增加当前位置:
curr_pos = curr_pos + length_of_read_line; - 使用
lseek(fd, current_position, SEEK_SET);将指针设置到当前位置
SEEK_SET - 将指针设置为距文件开头的给定偏移量。在我的伪代码中current_position 是偏移量。
实际上它工作正常,但我总是从文件开头移动指针 - 我使用 SEEK_SET - 它没有优化。
lseek 也接受参数SEEK_CUR - 这是当前位置。如何从指针的当前位置(SEEK_CUR)向后移动指针。我尝试设置负偏移,但没有成功。
【问题讨论】:
-
为什么要寻找?如果读取文件的一部分,文件指针指向下一个要读取的位置。
-
请编辑您的帖子并将您的完整代码包含在代码块中。如果没有它,我们无法判断您的错误可能是什么。
-
是的,但是我已经读取了 100 个字节,并且行尾可能位于 65 位。读完每一行后,我必须将指针设置为文件的开头。
-
... 但没有用。 这不是一个有用的问题描述。一点也不。发布一个完整的代码示例,演示您的问题、您认为错误的地方以及您认为应该做的事情。
-
SEEK_SET有什么问题?
标签: c linux posix fcntl unistd.h