C言語でcpコマンドを書きたい

■要求定義
– ファイルやフォルダをコピーする
– cp (移動元ファイル名/フォルダ名) (移動先ファイル名/フォルダ名) 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdio.h>
#include <stdlib.h> //汎用ライブラリ
#include <string.h>
 
int main(){
 
    FILE *fpSrc, *fpDes, *fp;
    char ss[256], ch[50];
 
    fpSrc = fopen("test.txt", "r");
    fpDes = fopen("copy.txt", "w");
 
    while(fgets(&ss, 256, fpSrc) != NULL){
        printf("%s", ss);
        fwrite(ss, 1, 8, fpDes);
    }
 
    fclose(fpSrc);
    fclose(fpDes);
 
    printf("コピーしました。\n");
         
    return 0;
}

$ ./dev
asdf
1234コピーしました。

■考察
あれ、コピー先のデータはバイナリデータで入ってるな。
調べてみると、fwriteはバイナリデータの書き込みとのこと。
fwriteではなく、fputs()に変更します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int main(){
 
    FILE *fpSrc, *fpDes;
    char ss[256];
 
    fpSrc = fopen("test.txt", "r");
    fpDes = fopen("copy.txt", "w");
 
    while(fgets(&ss, 256, fpSrc) != NULL){
        printf("%s", ss);
        fputs(ss, fpDes);
    }
 
    fclose(fpSrc);
    fclose(fpDes);
 
    printf("コピーしました。\n");
         
    return 0;
}

コピーできました。
バイナリとは2進数データのこと。