Хрестоматия по программированию на Си в Unix



     пульт для divisat | МДФ 3мм |          

Примеры. Хрестоматия по программированию на Си в Unix - стр. 2


if((fdin = open( src, O_RDONLY )) < 0 ){ printf( "Сan't read %s\n", src ); return FAILED; } if((fdout = creat( dst, 0644 )) < 0 ){ /* rw-r--r-- */ printf( "Can't create %s\n", dst ); return FAILED; } retc = copyfile( fdin, fdout ); close( fdin ); close( fdout ); return retc; } /* Переименование файла. Вернуть OK, если удачно, FAILED - неудачно */ int mlink(char *src, char *dst, unsigned typefrom, unsigned typeto) { switch( typefrom ){ case S_IFDIR: /* переименование каталога */ printf( "rename directory %s --> %s\n", src, dst );

if( access( dst, 0 ) == 0 ){ /* 0 - проверить существование файла */ printf( "%s exists already\n", dst ); /* файл уже существует */ return FAILED; } if( link( src, dst ) < 0 ){ printf( "Can't link to directory %s\n", dst ); perror( "link" ); /* Возможно, что для выполнения link() для каталогов, * программа должна обладать правами суперпользователя. */ return FAILED; } unlink( src ); return OK;

default: /* dst - не существует или обычный файл */ printf( "move %s --> %s\n", src, dst ); unlinkd( dst, typeto ); /* зачищаем место, т.к. link() * отказывается выполняться, если * файл dst уже существует (errno==EEXIST). */ if( link( src, dst ) < 0 ) return FAILED; unlinkd( src, typefrom ); /* удаляем старый файл */ return OK; } } /* Если не получилось связать файл при помощи link() - следует * скопировать файл в указанное место, а затем уничтожить старый файл. */ int mcopy(char *src, char *dst, unsigned typefrom, unsigned typeto) { if( typefrom == S_IFDIR ) return FAILED; /* каталог не копируем, поскольку непосредственная запись * в каталог (как целевой файл) разрешена только ядру ОС. */ return docopy( src, dst, typefrom, typeto ); } /* Переименование файла */ int domove(char *src, char *dst, unsigned typefrom, unsigned typeto) { switch( typefrom ){ default: if( ! mlink( src, dst, typefrom, typeto)){ if( ! mcopy( src, dst, typefrom, typeto)){ printf( "Can't move %s\n", src ); return FAILED; } else unlinkd( src, typefrom ); /* стереть старый */ } break;




Содержание  Назад  Вперед