Лаб. работа “Работа с файлами в Linux”
Системное программирование
Практика
Цель лабораторной работы
Изучение основных аспектов работы с файлами в операционной системе Linux в контексте системного программирования.
Задачи лабораторной работы
- Ознакомиться с основными командами и инструментами работы с файлами в Linux, такими как
ls
,cat
,mkdir
,rm
,mv
,cp
и т.д. - Изучить системные вызовы для работы с файлами в языке программирования C, таких как
open
,close
,read
,write
,lseek
и т.д. - Написать программы на языке C для создания, чтения, записи, перемещения и удаления файлов в Linux.
- Исследовать работу с файловыми дескрипторами и файловыми правами в Linux.
- Примененить на практике концепции файловой системы Linux через системные вызовы.
- Протестировать разработанные программы на корректность работы с различными типами файлов и структурами директорий.
- Проанализировать результаты выполнения программ и выявить возможные проблемы или ошибки.
- Оформить отчет о выполненной работе, включающий описание поставленных задач, исходный код программ и результаты тестирования.
Порядок выполнения работы
1. Создание файла: Создайте простую программу на языке Си, использующую системный вызов open()
, чтобы создать новый файл.
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
int main() {
int fd;
fd = open("example.txt", O_CREAT | O_WRONLY, 0644);
if (fd == -1) {
perror("open");
return 1;
}
printf("Файл создан успешно!\n");
close(fd);
return 0;
}
2. Запись данных в файл: Модифицируйте программу так, чтобы она записывала строку в файл, используя системный вызов write()
.
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
int main() {
int fd;
char buffer[100] = "Привет, мир!";
fd = open("example.txt", O_WRONLY | O_APPEND);
if (fd == -1) {
perror("open");
return 1;
}
if (write(fd, buffer, strlen(buffer)) == -1) {
perror("write");
return 1;
}
printf("Данные успешно записаны в файл!\n");
close(fd);
return 0;
}
3. Чтение данных из файла: Добавьте код для чтения данных из файла, используя системный вызов read()
.
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
int main() {
int fd;
char buffer[100];
fd = open("example.txt", O_RDONLY);
if (fd == -1) {
perror("open");
return 1;
}
if (read(fd, buffer, sizeof(buffer)) == -1) {
perror("read");
return 1;
}
printf("Прочитанные данные: %s\n", buffer);
close(fd);
return 0;
}
4. Изменение размера файла: Добавьте возможность изменять размер файла, используя системный вызов ftruncate()
.
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
int main() {
int fd;
fd = open("example.txt", O_RDWR);
if (fd == -1) {
perror("open");
return 1;
}
if (ftruncate(fd, 10) == -1) {
perror("ftruncate");
return 1;
}
printf("Размер файла изменен успешно!\n");
close(fd);
return 0;
}
5. Удаление файла: Напишите программу для удаления файла с помощью системного вызова unlink()
.
Контрольные вопросы
- Какие основные команды Linux используются для работы с файлами и директориями?
- Какие системные вызовы предоставляет язык программирования C для работы с файлами?
- Что такое файловый дескриптор? Каков его роль в системном программировании?
- Какие функции языка C используются для открытия файла?
- Какие флаги могут быть переданы функции
open()
для управления режимом открытия файла? - Какие системные вызовы используются для чтения и записи данных в файл?
- Какие функции C используются для перемещения указателя текущей позиции в файле?
- Какие системные вызовы позволяют перемещаться по директориям и работать с ними?
- Что такое права доступа к файлам в Linux? Как они устанавливаются и изменяются?
- Какие системные вызовы позволяют управлять правами доступа к файлам?
- Какие методы используются для проверки успешности выполнения системных вызовов в языке C?
- Какие основные функции используются для удаления файлов и директорий в Linux?
- Какие методы можно использовать для обработки ошибок при работе с файлами в языке C?
- В чем состоит различие между абсолютным и относительным путями к файлам и директориям?
- Какие средства предоставляет операционная система Linux для поиска файлов по различным критериям?