Архитектура Unix

. Программа, содержащая вызов системной функции lseek



Рисунок 5.10. Программа, содержащая вызов системной функции lseek

#include <fcntl.h> main(argc,argv) int argc; char *argv[]; { int fd,skval; char c; if(argc != 2) exit(); fd = open(argv[1],O_RDONLY); if (fd == -1) exit(); while ((skval = read(fd,&c,1)) == 1) { printf("char %c\n",c); skval = lseek(fd,1023L,1); printf("new seek val %d\n",skval); } } |


На Рисунке 5.11, например, показаны записи из таблиц, приведенных на Рисунке 5.4, после того, как второй процесс закрывает соответствующие им файлы. Записи, соответствующие дескрипторам 3 и 4 в таблице пользовательских дескрипторов файлов, пусты. Счетчики в записях таблицы файлов теперь имеют значение 0, а сами записи пусты. Счетчики ссылок на файлы "/etc/passwd" и "private" в индексах также уменьшились. Индекс для файла "private" находится в списке свободных индексов, поскольку счетчик ссылок на него равен 0, но запись о нем не пуста. Если еще какой-нибудь процесс обратится к файлу "private", пока индекс еще находится в списке свободных индексов, ядро востребует индекс обратно, как показано в разделе 4.1.2.



Содержание раздела