Лабораторная работа: Програми копіювання файлів
· S_IWRITE - може бути записаний.
target = open( argv[ 2 ], O_BINARY | O_WRONLY | O_CREAT | O_EXCL,
S_IREAD | S_IWRITE );
Якщо при відкритті(створенні) файлу до якого буде відбуватися копіювання, errno дорівнює EEXIST (тобто файл з таким ім’ям вже існує), повідомити про існування файлу та запитати про необхідність його перезапису.
if( errno == EEXIST ) {
printf( "\nFile already exists. Overwrite? (Y/N)\n" );
i = getch();
if( ( i == 'y' ) || ( i == 'Y' ) )
target = open( argv[ 2 ], O_BINARY | O_WRONLY | O_CREAT | O_TRUNC,
S_IREAD | S_IWRITE );
}
Перевірити чи вдалося створити файл .
if( target == -1 ) {
printf( "\nOpen target file error: %d", errno );
getch();
exit( 2 );
}
Цілочисельній змінній count присвоїти значення макросу BUFSIZE.
count = BUFSIZE;
Виділити пам’ять на масив buffer розміром count, та перевірити чи пам’ять дійсно виділена.
if( ( buffer = ( char* )malloc( count ) ) == NULL ) {
printf( "\nNot enough memory" );
getch();
exit( 3 );
}
За допомогою оператора while, який буде виконуватися доти, доки функція eof() не знайде закінчення файлу, який копіюється, будемо виконувати читання та запис з вихідного файлу у вхідний.
while( !eof( source ) ) {
За допомогою функції read() зчитаємо із файлу source до масиву buffer count байтів.
if( ( count = read( source, buffer, count ) ) == -1 ) {