ВУЗ:
Составители:
Для удобства рассмотрения ссылочных файлов создайте в домашнем
каталоге новый подкаталог, например, с именем new и перейдите в него.
mkdir new
cd new
Создайте два текстовых файла (например, с именами txtl, txt2), ис-
пользуя команду cat.
cat >txtl
первый файл
Ctrl+z
Здесь устройством ввода служит клавиатура, вывод перенаправлен
в файл с именем txtl. Как и для большинства команд подобного рода,
стандартным устройством ввода будет служить клавиатура, а стандарт-
ным устройством вывода монитор. Знак «»> указывает, что вывод пере-
направлен в файл с именем txtl. При вводе с клавиатуры можно построчно
вводить текст. Каждая строка завершается при нажатии клавиши «Enter».
Завершение ввода текста «Ctrl+z». Таким образом, в файле txtl будет
содержаться текст «первый файл». Аналогично можно создать файл txt2.
Просмотрите содержимое каталога командой ls, используя два ключа:
i - для вывода inode и l для использования широкого формата.
ls-i-l
2655 -rw-r--r--1 root root 22 2009-10-12 08:20 txtl
2656 -rw-r--r--1 root root 22 2009-10-12 08:21 txt2
Сделайте жесткую ссылку newl на файл txtl, используя команду ln,
и опять просмотрите содержимое каталога.
ln txt1 new1
Is
-i -l
2655 -rw-r--r-- 2 root root 22 2009-10-12 08:20 txt1
2656 -rw-r--r-- 1 root root 22 2009-10-12 08:21 txt2
2655 -rw-r--r-- 2 root root 22 2009-10-12 08:20 newl
10
/* Создание канала (добавьте проверку на успешность операции)*/
pipe(fd);
/* Запись всей строки вместе с признаком конца строки в канал */
size = write(fd[l], string, 14);
/* Чтение строки из канала */
size = read(fd[0], resstring, 14);
/* Печать прочитанной строки */
printf("%s\n ",resstring);
/* Закрыть входной и выходной потоки */
close(fd[0]);
close(fdfl]);
return 0;
}
Тот факт, что таблица открытых файлов наследуется процессом
ребенком при порождении нового процесса системным вызовом fork()
и входит в состав неизменяемой части системного контекста процесса
при системном вызове exec(), позволяет организовать передачу информа-
ции через pipe между родственными процессами, имеющими общего пра-
родителя, создавшего pipe. Примером служит программа для однона-
правленной связи между процессомродителем и процессомребенком
(как и в предыдущих примерах, все проверки на успешность завершения
операций добавьте самостоятельно).
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
int main(){
intfd[2], result;
size_t size;
char resstring[14];
pipe(fd); /* Создаем pipe */
result =fork(); /* Порождаем новый процесс */
31
Страницы
- « первая
- ‹ предыдущая
- …
- 9
- 10
- 11
- 12
- 13
- …
- следующая ›
- последняя »