Архитектура операционной системы UNIX   ::   Бах Морис Дж.

Страница: 24 из 715

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. Программа копирования файла



1.3.2 Среда выполнения процессов



Программой называется исполняемый файл, а процессом называется последовательность операций программы или часть программы при ее выполнении. В системе UNIX может одновременно выполняться множество процессов (эту особенность иногда называют мультипрограммированием или многозадачным режимом), при чем их число логически не ограничивается, и множество частей программы (такой как copy) может одновременно находиться в системе. Различные системные операции позволяют процессам порождать новые процессы, завершают процессы, синхронизируют выполнение этапов процесса и управляют реакцией на наступление различных событий. Благодаря различным обращениям к операционной системе, процессы выполняются независимо друг от друга.

Например, процесс, выполняющийся в программе, приведенной на Рисунке 1.4, запускает операцию fork, чтобы породить новый процесс. Новый процесс, именуемый порожденным процессом, получает значение кода завершения операции fork, равное 0, и активизирует операцию execl, которая выполняет программу copy (Рисунок 1.3).

|< Пред. 22 23 24 25 26 След. >|

Java книги

Контакты: [email protected]