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