C中的人物阅读

时间:2011-05-18 13:20:04

标签: c character

我正在努力了解这些功能之间的区别。如果我想一次读一个字符,可以使用其中一个。

fread()

read()

getc()

4 个答案:

答案 0 :(得分:3)

根据您的操作方式,您可以使用任何这些功能。

更容易使用可能是fgetc()

fread():从流中读取数据块documentation

read()fread()documentation

的posix实现

getc():从documentation)获取角色。请考虑使用fgetc()doc),因为它有点麻烦。

答案 1 :(得分:1)

fread()是一个标准的C函数,用于从文件中读取二进制数据块。

read()是一个用于执行此操作的POSIX函数。

getc()是一个标准的C函数(实际上是一个宏),用于从文件中读取单个字符 - 也就是说,它就是你要找的东西。

答案 2 :(得分:1)

除了其他答案之外,还要注意read是从文件中读取的无缓冲方法。 fread提供内部缓冲区并缓冲读取。缓冲区大小由您决定。每次调用read时,系统调用都会读取您告诉它的字节数。与fread一样,它将读取内部缓冲区中的块并仅返回您需要的字节。对于fread上的每个调用,它将首先检查它是否可以从缓冲区提供更多数据,如果不是它进行系统调用(read)并获得更多数据并返回仅你想要的部分。  另外read直接处理文件描述符编号,其中fread需要将文件作为FILE指针打开。

答案 3 :(得分:0)

答案取决于“一次一个角色”的含义。

如果要确保只从基础文件描述符中消耗一个字符(可能引用不可搜索的对象,如管道,套接字或终端设备),那么唯一的解决方案是使用{{1}长度为1.如果使用read(或类似)使用shell命令strace监视shell脚本,您将看到它重复调用read一个长度1.否则会冒太多字节读取(超过它正在寻找的换行符)并且后续进程无法在“下一行”上看到数据。

另一方面,如果应该执行进一步读取的唯一程序是您的程序本身,readfread将正常工作。请注意,如果您只是读取一个字节,getc应该很多getc快。