国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 操作系統 > 正文

實現簡單的cp命令

2024-06-28 13:22:14
字體:
來源:轉載
供稿:網友
實現簡單的cp命令

在linux下實現簡單的cp命令。這是《APUE》第四章的其中一道練習題。

其實思路很簡單,弄清規則就行了。規則1:源文件必須得存在,否則出錯;規則2:目的文件若不存在則創建,若存在,則提示是否覆蓋,是就覆蓋,不是就重新建一個。

下面給出代碼:

 1 /* 實現簡單的cp命令 */ 2 #include <stdio.h> 3 #include <stdlib.h> 4 #include <string.h> 5  6 int my_cp(char *argv[]);         7  8 int main(int argc, char *argv[])    /* argv[1]和argv[2]是文件的路徑 */ 9 {10     11     my_cp(argv);12 13     return 0;        14 }15 16 int my_cp(char *argv[])        /* 傳進來文件的路徑 */17 {18     FILE    *fp1, *fp2;19     char    ch;20     char    flag;        /* 提示是否要覆蓋 */21     char    filename[256];22 23     if ((fp1 = fopen(argv[1], "r")) == NULL)    /* 源文件必須得存在,否則出錯 */    24     {25         PRintf("error:the %s doesn't exist.", argv[1]);26         exit(1);27     }28 29     if ((fp2 = fopen(argv[2], "r")) != NULL)        /* 若文件2已存在 */30     {31         printf("The file %s has been exist, cover? Y/N:", argv[2]);32         scanf(" %c", &flag);33         34 35         fclose(fp2);        /* 因為下面無論是if還是else,都要重新打開文件,所以這里先關掉 */36 37         if (flag == 'y' || flag == 'Y')        /* 覆蓋文件2 */38         {39             if ((fp2 = fopen(argv[2], "w")) == NULL)40             {41                 printf("Cannot rewrite!");42                 exit(1);43             }44             while ((ch = fgetc(fp1)) != EOF)/* 將文件1的內容復制到文件2上 */45                 fputc(ch, fp2);46         }47         else    /* 不覆蓋文件2,新建一個文件2 */48         {49             /* 命名文件2為filename(1) */50             strcpy(filename, argv[2]);51             strcat(filename, "-copy");52 53             if ((fp2 = fopen(filename, "a")) == NULL)54             {55                 printf("Cannot build the file %s.", filename);56                 exit(1);57             }58             while ((ch = fgetc(fp1)) != EOF)/* 將文件1的內容復制到文件2上 */59                 fputc(ch, fp2);60         }61     }62     else    /* 文件2不存在,則創建 */63     {64         //fclose(fp2);        /* 不應該要這句,因為前面用r模式打開,要是不存在則會返回NULL指針,fclose(NULL)會出錯 */65         if ((fp2 = fopen(argv[2], "w")) == NULL)66         {67             printf("Cannot rewrite!");68             exit(1);69         }70         while ((ch = fgetc(fp1)) != EOF)/* 將文件1的內容復制到文件2上 */71             fputc(ch, fp2);72         73     }74     75     fclose(fp1);76     fclose(fp2);77 }
View Code

當目的文件存在時,提示是否覆蓋:

當目的文件不存在時,則創建:

不足之處:

1.只能支持一對一的復制,不能支持一對多的復制,這個可以改進。

2.因為是簡單的復制命令,所以并沒有參數可支持。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 定陶县| 宁陵县| 延寿县| 襄樊市| 南昌市| 渭源县| 监利县| 确山县| 蓬溪县| 丹东市| 丰宁| 黔江区| 大丰市| 蚌埠市| 三门县| 屏南县| 灌云县| 西宁市| 东兰县| 福清市| 洞口县| 手游| 罗甸县| 长沙县| 保山市| 贵港市| 嘉义市| 古交市| 沁水县| 桃源县| 临夏县| 奎屯市| 洪雅县| 新邵县| 印江| 都江堰市| 来凤县| 青川县| 陆川县| 东明县| 乌兰察布市|