Архитектура операционной системы UNIX


         

Программа копирует любые файлы, указанные


Программа копирует любые файлы, указанные при ее вызове в качестве аргументов, при условии, что разрешено открытие существующего файла и создание нового файла. Файл может включать в себя как текст, который может быть выведен на печатающее устройство, например, исходный текст программы, так и символы, не выводимые на печать, даже саму программу. Таким образом, оба вызова:

copy copy.c newcopy.c copy copy newcopy

являются допустимыми. Существующий файл также может быть каталогом. Например, по вызову: copy . dircontents

копируется содержимое текущего каталога, обозначенного символом ".", в обычный файл "dircontents"; информация в новом файле совпадает, вплоть до каждого байта, с содержимым каталога, только этот файл обычного типа (для создания нового каталога предназначена операция mknod). Наконец, любой из файлов может быть файлом устройства. Например, программа, вызванная следующим образом: copy /dev/tty terminalread

читает символы, вводимые с терминала (файл /dev/tty соответствует терминалу пользователя), и копирует их в файл terminalread, завершая работу только в том случае, если пользователь нажмет <Ctrl/d>. Похожая форма запуска программы: copy /dev/tty /dev/tty

вызывает чтение символов с терминала и их копирование обратно на терминал.
#include <fcntl.h> char buffer[2048]; int version = 1; /* будет объяснено в главе 2 */

main(argc,argv) int argc; char *argv[]; { int fdold,fdnew;

if (argc != 3) { printf("need 2 arguments for copy program\n); exit(1); } fdold = open(argv[1],O_RDONLY); /* открыть исходный файл только для чтения */ if (fdold == -1) { printf("cannot open file %s\n",argv[1]); exit(1); } fdnew = creat(argv[2],0666); /* создать новый файл с разрешением чтения и записи для всех поль- зователей */ if (fdnew == -1) { printf("cannot create file %s\n",argv[2]); exit(1); } copy(fdold,fdnew); exit(0); }

copy(old,new) int old,new; { int count;

while ((count = read(old,buffer,sizeof(buffer))) > 0) write(new,buffer,count); }
Рисунок 1.3. Программа копирования файла


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