[英]How to read a large file with function read() in C
阿罗哈,
我是新来的,所以请放轻松。 我正在尝试使用read()
函数read()
文件,然后write()
文件或文件描述符。 我的函数成功读取了一个文件,但是当我尝试读取一个较大的文件时(在我的示例中为40,000字节),会出现问题。
我认为我必须编写一个while循环,该循环将一直读取到文件末尾,但我仍然坚持如何循环的想法。
(我在程序主体中打开文件或文件描述符)
我的函数(还转换二进制输入char数据并写入ASCII):
void function(int readFrom,int writeOn){
char buffer[100];
int x = read(readFrom, buffer, sizeof(buffer));
int size= x/8;
int i;
for(i=0; i<size; i++){
char temp[sizeof(int)-1];
sprintf(temp,"%d",buffer[i];
write(writeOn, temp, sizeof(temp));
}
}
您需要检查read
和write
函数的返回值。 它们返回的读/写字节数可能小于您作为第三个参数传递的字节数。 无论read
和write
必须像一个循环来实现:
int bytesRead = 0;
while (bytesRead < sizeof(buffer)) {
int ret = read(readFrom, buffer + bytesRead, sizeof(buffer) - bytesRead);
if (ret == 0)
break; / * EOF */
if (ret == -1) {
/* Handle error */
}
bytesRead += ret;
}
您可以使用sprintf()
将字符从buffer
转换为非常小的缓冲区temp
。 在大多数当前系统上, int
是4个字节,因此您的printf会导致大于99
(ASCII字母'c'
)的char
值导致缓冲区溢出。 请注意, char
可以默认为带符号,因此小于-99
负值将需要5个字节来进行字符串转换:3位数字,减号和空终止符。
您应该使此缓冲区更大。
此外,我不明白为什么您只处理read()
函数read()
的缓冲区中的x/8
字节。 您的功能用途不明确。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.