为了账号安全,请及时绑定邮箱和手机立即绑定

C语言底层复制小程序,有几个细节不懂?

C语言底层复制小程序,有几个细节不懂?

交互式爱情 2019-04-09 20:25:23
我在学习《Linux程序设计》-底层文件访问时遇到了这段代码,它是一个文件复制程序:#include#include#include#includeintmain(){charc;intin,out;in=open("file.in",O_RDONLY);out=open("file.out",O_WRONLY|O_CREAT,S_IRUSR|S_IWUSR);while(read(in,&c,1)==1)write(out,&c,1);exit(0);}Q:这两行没看懂,特别是&c和3个数字1?while(read(in,&c,1)==1)write(out,&c,1);提前感谢回答问题的朋友们!
查看完整描述

2 回答

?
蝴蝶不菲

TA贡献1810条经验 获得超4个赞

read()函数的第二个参数表示要将读取的的数据存放到哪里,第三个参数表示想要一次读取的数据大小,返回值表示实际读取的数据大小
所以
read()第二个参数是&c、第三个参数是1表示读取一个字节,将其保存到变量c中,然后判断read()返回值是否是1,如果不是的话表示文件读取完毕,则会退出while循环
write()类似,第二个参数和第三个参数联合起来表示将变量c中的那一个字节保存到文件中。
                            
查看完整回答
反对 回复 2019-04-09
?
森栏

TA贡献1810条经验 获得超5个赞

这个问题的,我来试试看能不能给你说个明白。read()函数简单地说作用就是从描述符fd(作为第一个参数,对应问题中的in或者out)读取n个字节(作为第三个参数)到buffer中(作为第二个参数,也就是题目中的c)。
关键点:1)目的地是第二个参数。2)函数的返回值要么判断函数是否执行成功要么知道实际读取了多少字节。
函数改变了目的地的内容,
我来给你举个例子:
#include
intread(int*p)
{
intb=20;
*p=b;
return1;
}
intmain()
{
inta=10;
if((read(&a))==1)
printf("a:%d\n",a);
return0;
}
变量a就相当于我们要修改的目的地。一开始是10,但是后来经过了read()函数却变成了20。
                            
查看完整回答
反对 回复 2019-04-09
  • 2 回答
  • 0 关注
  • 264 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信