使用文件描述符在C语言中读取文件

3
我想通过使用文件描述符从文件中读取内容,不能使用文件名称因为赋值规则的限制。我通过调用“open”获取了它,并且运行良好。此时我知道必须使用“read()”函数来读取它,但问题是“read()”函数需要读取的字节数作为参数,而我每次想要读取整行,所以不知道要读取多少个字节。
例如,如果我使用“fscanf()”,对于简单字符串,它可以正常工作并将整行返回给我。所以我的问题是:
是否有像“fscanf()”这样的函数,可以使用文件描述符而不是文件指针调用?

你可以缓存输入的字符,一旦足够(可以是空格或\n),就可以在结果缓冲区上运行sscanf。注意,缓冲区将没有NUL结尾符;你需要自己添加NUL。 - wildplasser
你为什么不使用 stdio? - Fred Foo
2个回答

5
当你说“必须使用read()”时,我无法确定这是你对从open()获得的文件描述符所理解的情况,还是某种赋值的限制。
如果你有一个文件描述符,但更喜欢使用fscanf()等函数,请使用fdopen()从fd中获取FILE *,然后继续使用stdio。
在内部,它使用像read()这样的函数读取到缓冲区,然后用fscanf()和相关函数处理这些缓冲区,当你读取它们时。

这是我对情况的错误理解。唯一的限制是我必须使用文件描述符,而不仅仅是调用fopen()并传入文件名(因为它是一个共享函数,在其中我没有文件名,只能从主文件中将其文件描述符作为参数传递,然后我必须使用它进行操作;)我不知道我可以使用fdopen()获取文件指针...以为从中读取的唯一方法是使用read()...感谢您的帮助.. :) - Spyros

2
你可以逐个字符地读取,直到读完整行,并检测“/n”。由于这是一项作业,我不会为你写代码。
但需要注意以下几点:
1. 你需要检查EOF,否则可能会陷入无限循环中。 2. 你应该声明一些缓冲区,读取一个字符,然后将其复制到缓冲区。由于不知道你的输入是什么,我无法建议一个大小,除了说对于一项作业任务,[256]可能足够。 3. 你需要确保不会在超过缓冲区长度的情况下溢出。 4. 继续阅读,直到找到“/n”字符。然后处理创建的行,并开始下一行。

谢谢您的建议...我也在考虑这样做,但如果我能获得文件指针并使用fscanf函数,那对我来说会更容易些。 - Spyros

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接