#include <io.h>
#include <sys\stat.h>
#include <sys\types.h>
#include <stdlib.h>
#include <errno.h>
#include <stdio.h>
#include <string.h>
#include <fcntl.h>
void main(int argc, char *argv[]){
int fdIn; // 読み込み用ファイルディスクリプタ
int fdOut; // 書き込み用ファイルディスクリプタ
int flag; // read関数の戻り値
char ch; // 読み込んだ文字
// パラメータが少ない場合
if ( argc < 3 ){
printf("パラメータが足りません.\n\n");
return;
}
// パラメータが多い場合
if ( argc > 3 ){
printf("パラメータが多すぎます.\n\n");
return;
}
// パラメータは「/?」か?
if ( strcmp(argv[1], "/?" ) == 0 ){
printf("ファイルをコピーします.\n\n");
printf("MYCOPY [ドライブ:][パス]ファイル名(コピー元) [ドライブ:][パス]ファイル名(コピー先)\n\n");
return;
}
// ファイルオープン
fdIn = open(argv[1], O_RDONLY | O_BINARY );
if ( fdIn == -1 ){
switch ( errno ){
case EACCES :
printf("アクセスは拒否されました");
break;
case EMFILE :
printf("開いているファイルが多すぎます");
break;
default :
printf("ファイルが見つかりません.");
}
printf(" - %s\n\n", argv[1]);
return;
}
// ファイルオープン
fdOut = open(argv[2], O_RDWR | O_CREAT );
if ( fdOut == -1 ){
switch ( errno ){
case EACCES :
printf("アクセスは拒否されました");
break;
case EMFILE :
printf("開いているファイルが多すぎます");
break;
default :
printf("ファイルが作成できません.");
}
printf(" - %s\n\n", argv[2]);
close( fdIn );
return;
}
// 1バイト読む
flag = read(fdIn, &ch, 1);
while( flag == 1 ){
// 読み込んだ文字を書き込む
flag = write( fdOut, &ch, 1 );
// 前の1バイトが正常に読み書き成功なら次の1バイトを読む
if ( flag == 1 )
// 1バイト読む
flag = read(fdIn, &ch, 1);
}
// ファイルクローズ
close( fdIn );
close( fdOut );
}
|