【发布时间】:2017-01-25 19:01:40
【问题描述】:
阿罗哈,
我是新来的,所以请放轻松。
我正在尝试使用函数read() 读取文件,然后将write() 读取到文件或文件描述符中。我的函数成功读取了一个文件,但是当我尝试读取更大的文件(在我的示例中大小为 40,000 字节)时出现问题。
我认为我必须编写一个 while 循环,该循环将一直读取到文件末尾,但我一直坚持如何......
(我在程序的 main 中打开一个文件或文件描述符)
我的函数(也转换二进制输入字符数据并写入 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));
}
}
【问题讨论】:
-
size(int)-1并不是一个真正的大缓冲区。 -
显示 40k 读取的“示例”。
-
此语句:
int size= x/8;使用整数数学,因此如果读取的字节数不是 8 的倍数,则某些字节将永远不会被处理。由于 100 不是 8 的倍数,因此每次通过外循环时,您可能会错过输出 4 个字节。此外,当read()未能输入 100 个字节时,每次通过外循环时,预计执行最多会丢失 7 个字节。读取 1024 字节并使用来自read()的返回值作为调用write()的计数要好得多 -
@reny310:您可以通过单击分数下方的灰色复选标记来接受其中一个答案。