int main(int argc, const char *argv[])
{
int pd=fork();
if(pd==-1)
{
perror("open:");
return 1;
}
if(pd>0)
{
int fd=open("./homework.txt",O_WRONLY|O_CREAT,0666);
if(fd==-1)
{
perror("open:");
return 1;
}
int arr[2]={0};
for(int i=0;i<2;i++)
{
if(i==0)
{
printf("please enter length");
}
else
{
printf("please enter width:");
}
scanf("%d",&arr[i]);
while(getchar()!='\n');
write(fd,arr+i,4);
}
close(fd);
wait(0);
}
else if(pd==0)
{
sleep(3);
int fd=open("./homework.txt",O_RDONLY);
if(fd==-1)
{
perror("open:");
return 1;
}
int arr[2]={0};
for(int i=0;i<2;i++)
{
read(fd,arr+i,4);
}
close(fd);
printf("长方形的面积为:%d\n",arr[0]*arr[1]);
return 0;
}
return 0;
}
① 标准IO和文件IO的区别
《1》每调用文件IO的函数一次,就要访问一次磁盘,导致文件IO的效率低下
标准IO是将数据先写入缓存区,满足特定条件后再将缓存区的所有数据写入磁盘
,减少了对磁盘的访问次数。所以效率比文件IO高
《2》
② 文件IO和标准IO都是如何管理读写光标
标准IO调用函数fopen打开文件时文件打开方式不同光标定位不同
以只读的形式打开(r),成功打开后光标定位在文件中第一个数据脸上
以可读可写形式打开文件(r+),成功打开后读写光标独立,读光标在文件中第一个数据脸上,写光标在文件结束符脸
以只写的形式打开文件(w),成功打开后光标定位在文件中第一个数据脸上
以可读可写形式打开文件(w+),成功打开后读写光标独立,读光标在文件中第一个数据脸上,写光标在文件
以追加写的形式打开文件(a),成功打开后光标位于文件尾部结束符脸上
以可读追加写的形式打开文件(a+), 成功打开后读光标在文件中第一个数据脸上,写光标在文件结束符脸上
③ 反复open同一个文件,读写光标是共享还是独立
独立
④ 标准IO缓存类型,分别对应那些文件,分别多大
标准IO缓存区分为 行缓存,全缓存,无缓存 三类
行缓存
只有标准输出流stdout使用行缓存,具体来说就是只有流向终端的标准输出流才使用行缓存
全缓存
所有通过fopen 函数打开的文件都是使用的全缓存
无缓存、
只有标准错误流stderr使用的无缓存,集体来说就是只有流向终端的标准错误流才使用无缓存
⑤ 总结fopen函数打开失败的原因
⑥ 标准IO的行缓存和全缓存的刷新机制
行缓存的刷新机制:① 遇到回车刷新
② 缓存区满以后刷新
③ 程序结束以后刷新缓存
④ IO关闭,刷新缓存
⑤ IO切换,刷新缓存
⑥ 手动调用函数 fflush(FILE*)
全缓存的刷新机制: 除了遇到回车不刷新缓存,其他和行缓存数字新机制相同
无缓存 : 没有缓存刷新机制
⑦ open函数里面,NOFOLLOW这个宏有什么作用
:打开的是快捷方式本身还是
⑧ 假设现在有两个描述符 fd1 和fd2,dup2(fd1,fd2)和fd1==fd2的区别