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

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

我在学习《Linux程序设计》- 底层文件访问 时遇到了这段代码,它是一个文件复制程序:

#include <unistd.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>

int main()
{
    char c;
    int in, 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); 

提前感谢回答问题的朋友们!


既然在学linux,那么对于使用的函数用man查一下,多看看文档


read()函数的第二个参数表示要将读取的的数据存放到哪里,第三个参数表示想要一次读取的数据大小,返回值表示实际读取的数据大小

所以
read()第二个参数是&c、第三个参数是1 表示读取一个字节,将其保存到变量c中,然后判断read()返回值是否是1,如果不是的话表示文件读取完毕,则会退出while循环
write()类似,第二个参数和第三个参数联合起来表示将变量c中的那一个字节保存到文件中。


这个问题的,我来试试看能不能给你说个明白。
read()函数简单地说作用就是从描述符fd(作为第一个参数,对应问题中的in或者out)读取n个字节(作为第三个参数)到buffer中(作为第二个参数,也就是题目中的c)。
关键点:1)目的地是第二个参数。2)函数的返回值要么判断函数是否执行成功要么知道实际读取了多少字节。
函数改变了目的地的内容,
我来给你举个例子:

#include    <stdio.h>
int read( int *p )
{
    int b = 20;
    *p = b;
    return 1;
 }
  int main()
 {
      int a = 10;
      if( ( read( &a ) ) == 1 )
         printf( "a:%d\n", a );
    return 0;
 }

变量a就相当于我们要修改的目的地。一开始是10,但是后来经过了read()函数却变成了20。

【热门文章】
【热门文章】