Системное программирование, файловый ввод-вывод
Все программы должны соответствовать принятому стилю кодирования.
- В начале файла - заголовок с автором и лицензией;
- Перед каждой функцией - комментарий с описанием функции и аргументов;
- Текст программы разбит на "абзацы" с комментарием перед каждым "абзацем".
Все возвращаемые функциями значения должны проверяться. В случае ошибок выполнение программы должно аварийно завершаться с выдачей сообщения об ошибке и кодом завершения EXIT_FAILURE.
3. Файловый ввод-вывод
- Создайте программу копирования файлов. Программа должна получать два аргумента командной строки, первый аргумент - файл, откуда копировать, второй аргумент - файл, куда копировать.
- Создайте программу добавления строки в конец произвольного файла. Программа должна получать два аргумента командной строки, первый аргумент - файл, в который добавить строку, второй аргумент - строка для добавления.
- Создайте программу, позволяющую выяснить поведение функции open() при открытии с флагами O_CREAT | O_EXCL для записи файла, который существует и для которого нет прав на запись. Какую ошибку вернет функция open() - "нет прав" или "файл существует" ?
- Создайте программу, позволяющую выяснить: если файл открыт для чтения и записи с флагом O_APPEND, можно ли читать данные из произвольного места в файле с помощью функций lseek() и read() ? Можно ли записывать данные в произвольное место в файле с помощью функций lseek() и write() ? (упр. 3.6 в учебнике)
- Создайте программу, с помощью которой можно заметить особенность работы функции read() при чтении из терминала (возврат из read() происходит при нажатии enter).
- Создайте программу, с помощью которой можно проверить, действительно ли при создании дубликата файлового дескриптора функцией dup() дубликат и исходный файловый дескриптор разделяют общий указатель текущей позиции в файле.