[使用read()逐字节读取文件

问题描述 投票:2回答:3

[我正在努力把我的头缠在read()系统调用上。

如何使用read()读取实际文件逐字节

第一个参数是int类型的文件描述符。如何将文件传递给read()呼叫?

c file-io
3个回答
6
投票

您用open()打开文件;您将open()返回的文件描述符传递给open()

read()

还有其他返回文件描述符的功能:read()int fd; if ((fd = open(filename, O_RDWR)) >= 0) { char c; while (read(fd, &c, 1) == 1) putchar(c); } creat()creat()

请注意,虽然这可行,但效率低下,因为它会进行大量系统调用。通常,您一次读取大量字节,以减少系统调用的次数。标准I / O库(在pipe()中)会自动处理。如果使用低级pipe()socket()socket()accept()系统调用,则必须自己担心缓冲等问题。


1
投票

accept()的最后一个参数是要从文件读取的字节数,因此将<stdio.h>传递给它即可。在此之前,您可以使用open()获取文件句柄,如下所示(未经测试的代码):

read()

但是,通常不建议逐字节读取文件,因为它会显着影响性能。相反,您应该缓冲输入并分块处理它,如下所示:

write()

您最终将读取的内容包装成一个循环,直到达到EOF。


0
投票

对Kernet的read()系统调用的概念是这个(简单的英语)

读取(,,)

示例:从磁盘中的文件逐字符读取到此缓冲区BUFF中

int fd //初始化文件描述符fd =打开(“ file_name”,O_RDONLY); //以只读模式打开文件名为的文件。字符BUFF;

读取(fd,&BUFF,sizeof(char)); //将带有文件描述符的文件读入内存中大小为CHAR数据类型的字符的BUFF缓冲区的地址中。

© www.soinside.com 2019 - 2024. All rights reserved.