Linux 文件操作测试程序未按预期运行
Linux file operations test program doesn't behave as expected
有人可以向我解释为什么以下测试程序会打印:
abcde
fghie
jklie
米
谎言
米
谎言
而不是:
abcde
fghie
jklie
mklie
mklie
节目是:
#include <unistd.h>
#include <fcntl.h>
#include <stdio.h>
char buffer[16];
void main()
{
int fd=open("bb",O_RDONLY);
int i;
for(i=5;i>0;i--)
{
read(fd,buffer,i);
printf("%s\n",buffer);
}
}
文件 bb 包含序列:abcdefghijklm
- 第一次迭代读取 "abcde",因此
buffer
包含 "abcde[=35=][=35=][=35=][=35=][=35=][=35=][=35=][=35=][=35=][=35=][=35=]" 和 fd
指向 'f'
- 第二次迭代读取 "fghi",因此
buffer
包含 "fghie[=37=][=37=][=37=][=37=][=37=][=37=][=37=][=37=][=37=][=37=][=37=]" 和 fd
指向 'j'
- 第三次迭代读取 "jkl",因此
buffer
包含 "jklie[=39=][=39=][=39=][=39=][=39=][=39=][=39=][=39=][=39=][=39=][=39=]" 和 fd
指向 'm'
- 第四次迭代读取"m\n",所以
buffer
包含"m\nlie[=41=][=41=][=41=][=41=][=41=][=41=][=41=][=41=][=41=][=41=][=41=]"并且fd
在文件末尾
- 第五次迭代没有读取任何内容,因此
buffer
中没有任何变化
请注意,代码依赖于全局变量 buffer
被初始化为零。
有人可以向我解释为什么以下测试程序会打印:
abcde
fghie
jklie
米
谎言
米
谎言
而不是:
abcde
fghie
jklie
mklie
mklie
节目是:
#include <unistd.h>
#include <fcntl.h>
#include <stdio.h>
char buffer[16];
void main()
{
int fd=open("bb",O_RDONLY);
int i;
for(i=5;i>0;i--)
{
read(fd,buffer,i);
printf("%s\n",buffer);
}
}
文件 bb 包含序列:abcdefghijklm
- 第一次迭代读取 "abcde",因此
buffer
包含 "abcde[=35=][=35=][=35=][=35=][=35=][=35=][=35=][=35=][=35=][=35=][=35=]" 和fd
指向 'f' - 第二次迭代读取 "fghi",因此
buffer
包含 "fghie[=37=][=37=][=37=][=37=][=37=][=37=][=37=][=37=][=37=][=37=][=37=]" 和fd
指向 'j' - 第三次迭代读取 "jkl",因此
buffer
包含 "jklie[=39=][=39=][=39=][=39=][=39=][=39=][=39=][=39=][=39=][=39=][=39=]" 和fd
指向 'm' - 第四次迭代读取"m\n",所以
buffer
包含"m\nlie[=41=][=41=][=41=][=41=][=41=][=41=][=41=][=41=][=41=][=41=][=41=]"并且fd
在文件末尾 - 第五次迭代没有读取任何内容,因此
buffer
中没有任何变化
请注意,代码依赖于全局变量 buffer
被初始化为零。