Лаб. работа "Работа с файлами в Linux"

Цель лабораторной работы

Изучение основных аспектов работы с файлами в операционной системе Linux в контексте системного программирования.

Задачи лабораторной работы

  1. Ознакомиться с основными командами и инструментами работы с файлами в Linux, такими как ls, cat, mkdir, rm, mv, cp и т.д.
  2. Изучить системные вызовы для работы с файлами в языке программирования C, таких как open, close, read, write, lseek и т.д.
  3. Написать программы на языке C для создания, чтения, записи, перемещения и удаления файлов в Linux.
  4. Исследовать работу с файловыми дескрипторами и файловыми правами в Linux.
  5. Примененить на практике концепции файловой системы Linux через системные вызовы.
  6. Протестировать разработанные программы на корректность работы с различными типами файлов и структурами директорий.
  7. Проанализировать результаты выполнения программ и выявить возможные проблемы или ошибки.
  8. Оформить отчет о выполненной работе, включающий описание поставленных задач, исходный код программ и результаты тестирования.

Порядок выполнения работы

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}

Контрольные вопросы

  1. Какие основные команды Linux используются для работы с файлами и директориями?
  2. Какие системные вызовы предоставляет язык программирования C для работы с файлами?
  3. Что такое файловый дескриптор? Каков его роль в системном программировании?
  4. Какие функции языка C используются для открытия файла?
  5. Какие флаги могут быть переданы функции open() для управления режимом открытия файла?
  6. Какие системные вызовы используются для чтения и записи данных в файл?
  7. Какие функции C используются для перемещения указателя текущей позиции в файле?
  8. Какие системные вызовы позволяют перемещаться по директориям и работать с ними?
  9. Что такое права доступа к файлам в Linux? Как они устанавливаются и изменяются?
  10. Какие системные вызовы позволяют управлять правами доступа к файлам?
  11. Какие методы используются для проверки успешности выполнения системных вызовов в языке C?
  12. Какие основные функции используются для удаления файлов и директорий в Linux?
  13. Какие методы можно использовать для обработки ошибок при работе с файлами в языке C?
  14. В чем состоит различие между абсолютным и относительным путями к файлам и директориям?
  15. Какие средства предоставляет операционная система Linux для поиска файлов по различным критериям?
← Лаб. работа "Язык командного энтерпритатора … Лаб. работа "Работа с процессами в Linux" →