Главная страница

Лабораторная работа Операции с файлами в программе на языке Си Цель работы


Скачать 185.18 Kb.
НазваниеЛабораторная работа Операции с файлами в программе на языке Си Цель работы
Дата17.01.2022
Размер185.18 Kb.
Формат файлаdocx
Имя файлаReport3.docx
ТипЛабораторная работа
#333287

Лабораторная работа № 3. Операции с файлами в программе на языке Си

Цель работы

Целью выполнения настоящей лабораторной работы является получение начальных навыков использования системных вызовов UNIX в программах на языке Си. Данные вызовы выполняют основные операции с файлами: открытие и создание, чтение и запись, закрытие и уничтожение.

Ход работы

В данной работе мы разработаем программу на языке Си, которая будет производить ввод с клавиатуры содержимого текстового файла, имя которого задается в командной строке, используя стандартные функции и вывод его на экран, используя системные вызовы.

  1. Создадим файлы prog.c и text.txt, которые будем использовать.



  1. Запустим mc для того, чтобы воспользоваться встроенным редактором для написания кода программы.



  1. Встроенный редактор. Полный код будет приведен ниже.



  1. Код программы.

#include

#include

#include

#include

#include

#include
#define INVALID_FILE_DESCRIPTOR (-1)

#define ERROR_MESSAGE_CREATE_FILE "Error while creating"

#define ERROR_MESSAGE_OPEN_FILE "Error while opening"
static void create_file(const char *const file_name)

{

int file_descriptor = open(file_name, O_CREAT | O_WRONLY);

if (file_descriptor != INVALID_FILE_DESCRIPTOR)

{

char buffer[BUFSIZ];

ssize_t bytes_read;

while ((bytes_read = read(STDIN_FILENO, buffer, BUFSIZ)) > 0)

{

write(file_descriptor, buffer, (size_t)bytes_read);

}

close(file_descriptor);

}

else

{

write(STDERR_FILENO, ERROR_MESSAGE_CREATE_FILE, strlen(ERROR_MESSAGE_CREATE_FILE));

}

}
static void print_file_stdlib(const char const *file_name)

{

FILE *file_handle = fopen(file_name, "r");

if (file_handle != NULL)

{

char buffer[BUFSIZ];

while (fgets(buffer, BUFSIZ, file_handle) != NULL)

{

fputs(buffer, stdout);

}
fclose(file_handle);

}

else

{

fputs(ERROR_MESSAGE_OPEN_FILE, stderr);

}

}
int main(int argc, char *argv[])

{

char file_name[BUFSIZ];

if (argc == 2)

{

strncpy(file_name, argv[1], BUFSIZ - 1);

file_name[BUFSIZ] = '\0';

create_file(file_name);

print_file_stdlib(file_name);

}

return 0;

}


  1. Скомпилируем и запустим на выполнение написанную программу.



Заключение

В ходе выполнения лабораторной работы были получены навыки использования системных вызовов UNIX в программах на языке Си.



написать администратору сайта