linux系统下的c编程——my first program

来源:互联网 发布:c语言中return的用法 编辑:程序博客网 时间:2024/05/21 22:37

今天学习了在linux如何写复制文件的函数,在学习了书上一些基础的库函数和语句后,我自己编写了一个复制文件的函数,虽然过程有些坎坷,但写完还是觉得自己棒棒哒~

#include <stdio.h>#include<sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <unistd.h>#define PERMS 0666#define DUMMY 0#define BUFSIZE 1024main(int argc,char *argv[])                     //要求用户用cp格式输入命令(cp替换为./a.out){    int source_fd,target_fd,num;    char iobuffer[BUFSIZE];    if(argc!=3)                                 //若输入格式正确(./a.out os.c b.c,os.c为源文件,b.c为新文件),则可以开始打开文件    {           printf("复制功能打开失败");        return 1;    }    if((source_fd=open(*(argv+1),O_RDONLY,DUMMY))==-1)    //打开源文件失败open函数会返回-1,将open函数返回的值赋给文件描述符    {        printf("1文件打开失败");        return 2;    }    if((target_fd=open(*(argv+2),O_WRONLY|O_CREAT,PERMS))==-1)   //我的文件夹里没有b.c文件,所以会自动建立b.c文件,建立成功返回-1    {        printf("2文件打开失败");        return 3;    }    while((num=read(source_fd,iobuffer,BUFSIZE))>0)       //将源文件里的内容读到iobuffer中,若返回值小于0,则读完文件,跳出循环    if(num!=write(target_fd,iobuffer,num))                //读的字节数要和写入的字节数保持一致,否则出错,跳出程序    {        printf("文件复制错误");        return 4;    }    close(source_fd);                   //复制完成,关闭源文件    close(target_fd);                   //复制完成,关闭新文件}

但是运行结果貌似有点问题呢。。

这里写图片描述

最后几行好像不见了。。

(昨天没有写完)今天回来改错,却发现错误奇迹的自己好了。。

这里写图片描述

但是我发现了一个新的问题,就是已经写过的文件不能重新写入,也就是内容不可以覆盖,于是我重新检查了一遍代码,我发现我的write函数里少了一个参数O_TRUNC 这个参数是如果文件存在,则该文件截断 的意思,也就是可以覆盖已经存在的文件,因为少了这个参数,所以不可以覆盖。

加了这个参数就对了,已经创建的文件也可以覆盖粘贴。

0 0
原创粉丝点击