用windows.h读取c语言中的行

用windows.h读取c语言中的行,c,system-calls,C,System Calls,我需要使用windows.h的系统调用来读取从命令行获取的文件。我可以使用ReadFile()将整个文件读取到缓冲区,然后在第一个\0处剪切缓冲区,但我如何只能读取一行?我还需要读取文件的最后一行,在不将整个文件读入缓冲区的情况下,这是可能的,因为文件可能是4gb或更大,所以我无法读取它。所以有人知道如何逐行阅读吗?ReadFile对于您想要做的事情来说是一个特别糟糕的选择。你可以使用吗?在您的情况下,这将更容易使用。如果您知道行的长度,那么您就可以使用比最大行稍大一点的缓冲区 ReadFile

我需要使用
windows.h
的系统调用来读取从命令行获取的文件。我可以使用
ReadFile()
将整个文件读取到缓冲区,然后在第一个
\0
处剪切缓冲区,但我如何只能读取一行?我还需要读取文件的最后一行,在不将整个文件读入缓冲区的情况下,这是可能的,因为文件可能是4gb或更大,所以我无法读取它。所以有人知道如何逐行阅读吗?

ReadFile
对于您想要做的事情来说是一个特别糟糕的选择。你可以使用吗?在您的情况下,这将更容易使用。

如果您知道行的长度,那么您就可以使用比最大行稍大一点的缓冲区

ReadFile读取大量字节,并在行的第一个结尾剪切缓冲区(\n)

使用LZSeek定位到文件的末尾,然后向后移动一行字节,查找行的结尾,从那里开始并读取行的其余部分。

不要“在第一个\0处剪切缓冲区”,ReadFile不会返回以零结尾的字符串。它读取原始字节。您必须注意通过lpNumberOfBytesRead参数返回的值。它将等于传递的nNumberOfBytesToRead值,除非到达文件末尾

现在您知道缓冲区中有多少个有效字节了。在它们中搜索第一个“\r”或“\n”字节以查找行终止符。将字节范围复制到调用者提供的字符串缓冲区并返回。下一次读一行时,从前面停止的地方开始,经过行终止符。如果找不到行终止符,则必须复制缓冲区中的字节,并再次调用ReadFile()以读取更多字节。这使代码变得有点棘手,否则这是一个很好的练习。

不能:(.只有来自windows.h的windows系统调用。)