Лабораторная работа Операции с файлами в программе на языке Си Цель работы
Скачать 185.18 Kb.
|
Лабораторная работа № 3. Операции с файлами в программе на языке Си Цель работы Целью выполнения настоящей лабораторной работы является получение начальных навыков использования системных вызовов UNIX в программах на языке Си. Данные вызовы выполняют основные операции с файлами: открытие и создание, чтение и запись, закрытие и уничтожение. Ход работы В данной работе мы разработаем программу на языке Си, которая будет производить ввод с клавиатуры содержимого текстового файла, имя которого задается в командной строке, используя стандартные функции и вывод его на экран, используя системные вызовы. Создадим файлы prog.c и text.txt, которые будем использовать. Запустим mc для того, чтобы воспользоваться встроенным редактором для написания кода программы. Встроенный редактор. Полный код будет приведен ниже. Код программы. #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; } Скомпилируем и запустим на выполнение написанную программу. Заключение В ходе выполнения лабораторной работы были получены навыки использования системных вызовов UNIX в программах на языке Си. |