Лабораторная работа: Програми копіювання файлів
#define BUFSIZE 10000
Функція main() має два аргументи: цілочисельний аргумент argc який містить кількість аргументів у командному рядку та покажчик на масив покажчиків на рядки, де кожен вказує на певний аргумент командного рядка.
void main( int argc, char **argv ) {
Оголошуємо змінні:
int source, target;
int i;
char *buffer;
int count;
Перевіряємо чи правильна кількість аргументів у командному рядку. Якщо аргументів не три (програма, файл для копіювання, файл-копія), виводиться повідомлення про правильність заповнення командного рядка і виконання програми завершується.
if( argc != 3 ){
printf( "\n"
"Usage: COPY1 [d:][\\path]source_file [d:][\\path]target_file\n" );
getch();
exit( 1 );
}
Відкриваємо файл, який будемо копіювати за допомогою функції open(). Для цього передаємо в якості параметрів покажчик на імя файлу (argv[ 1 ]) та вказуємо типи доступу до файлу. O_BINARY - прапор доступу у бінарному режимі. O_RDONLY - прапор доступу до файлу "лише для читання". Функція open() у випадку успішного виконання повертає file handle і встановлює курсор на початок файлу, а у випадку помилки повертає -1 та встановлює errno в один із наступних станів: ENOENT, EMFILE, EACCES, EINVACC.
Даним if-ом перевіряємо успішність відкриття файлу, який варто копіювати.
if( ( source = open( argv[ 1 ], O_BINARY | O_RDONLY ) ) == -1 ) {
printf( "\nOpen source file error: %d", errno );
getch();
exit( 2 );
}
Відкриваємо файл, в який будемо копіювати за допомогою тієї ж функції open().
Прапор доступу до файлу встановлюємо в один із положень:
· O_BINARY - бінарний;
· O_WRONLY - для запису;
· O_CREAT - створюється;
· O_EXCL - перезаписується.
Прапор способу відкриття встановлюємо в один із положень: