Архитектура операционной системы 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 След. >|