Linux программирование в примерах
Шрифт:
Переменная
Строка 25 открывает файл, создавая его при необходимости. Строка 26 записывает сообщение в
Все кажется работающим замечательно,
Исторически
Как? Ну, Linux и Unix являются системами с квантованием времени, методикой, которая разделяет время процессора между всеми исполняющимися процессами. Это означает, что, хотя программа кажется выполняющейся все время, в действительности есть моменты, когда процессы спят, т.е. ожидают выполнения на процессоре.
Теперь рассмотрите программу профессора для отслеживания оценок студентов. Как профессор, так и злоумышленный студент в одно и то же время используют сильно нагруженную многопользовательскую систему. Программа профессора использует для создания временных файлов
Рис. 12.2. Состояние гонки с
Вот что случилось.
1. Оценивающая программа использует
2. Ядро останавливает оценивающую программу, чтобы могли поработать другие программы в системе. Это происходит до вызова
Пока оценивающая программа остановлена, студент создает файл с тем же самым именем, которое вернула
3. Теперь оценивающая программа открывает файл и записывает в него данные. Студент создал файл с правами доступа
4. Когда оценивающая программа завершает работу, она удаляет временный файл. Однако, у студента все еще есть копия. Например, может быть возможность получения прибыли при заблаговременной продаже своим товарищам их оценок.
Наш пример упрощенный; помимо простого похищения данных с оценками умный (хотя и аморальный) студент мог бы вместо этого изменить данные. Если бы профессор не проверял результаты работы своей программы дважды, никто бы ничего не узнал.
ЗАМЕЧАНИЕ. Мы не рекомендуем делать что-либо из этого! Если вы студент, не пытайтесь сделать что-либо подобное. Первое и самое главное, это неэтично. Во-вторых, вас могут выгнать из школы. В-третьих, ваши профессора, наверное, не сталь наивны, чтобы использовать
По приведенным и другим причинам, все три описанные в данном разделе функции не следует никогда использовать. Они существуют в POSIX и GLIBC лишь для поддержки старых программ, которые были написаны до того, как была осознана опасность этих процедур С этой целью системы GNU/Linux генерируют во время компоновки сообщение:
(Мы рассмотрим
Если бы в вашей системе не было
Газлайтер. Том 10
10. История Телепата
Фантастика:
боевая фантастика
рейтинг книги
СТРУНА ИСТОРИИ
Проза:
современная проза
рейтинг книги
Дань псам
8. «Малазанская империя»
Фантастика:
фэнтези
рейтинг книги
UNIX: взаимодействие процессов
Компьютеры и Интернет:
программирование
рейтинг книги
Барбаросса
Проза:
историческая проза
рейтинг книги
Глава рода
5. Живой лёд
Фантастика:
боевая фантастика
рейтинг книги
Михаил Федорович
3. Романовы. Династия в романах
Проза:
историческая проза
рейтинг книги
Человек случайностей (др. изд.)
Проза:
современная проза
рейтинг книги
Ветхий Завет. Перевод и комментарии
Религия и эзотерика:
прочая религиозная литература
рейтинг книги