Essays.club - Получите бесплатные рефераты, курсовые работы и научные статьи
Поиск

Файлы и потоки ввода-вывода

Автор:   •  Март 15, 2021  •  Лабораторная работа  •  3,396 Слов (14 Страниц)  •  269 Просмотры

Страница 1 из 14

Министерство науки и высшего образования Российской Федерации

Федеральное государственное автономное образовательное учреждение высшего образования

«Санкт-Петербургский национальный исследовательский университет информационных технологий, механики и оптики»

Мегафакультет: компьютерных технологий и управления

Факультет: Информационной безопасности и компьютерных технологий

Кафедра: Проектирования и безопасности компьютерных систем

Направление (специальность): «Информационная безопасность»

Лабораторная работа

По дисциплине:

«Системное программирование»

На тему:

«Файлы и потоки ввода-вывода»

Вариант №20

Выполнила:

Студентка гр. N3354

Рощина А. В.  

2020 г.

Задание:

[pic 1]

Пример работы программы:

[pic 2]  [pic 3] 


#include  <stdio.h>

#include  <string.h>

#include  <stdbool.h>

#include  <stdlib.h>

#include  <unistd.h>

#include  <errno.h>

extern char *optarg;

extern int optind;

bool isPalindrome(char *inputStr); // функция проверки, является ли строка палиндромом. обрабатывает только CP437. кириллицу игнорирует.

bool isSymbol(char c);             // функция проверки, не нужно ли игнорировать символ (игнорируется всё, кроме 0..1, A..Z, a..z)

void printError(int n);            // вывод информации об ошибке в stderr

typedef struct globalArgs_t {      

    int maxLen;                    // параметр -x, максимальная длина палиндрома

    int minLen;                    // параметр -n, минимальная длина палиндрома

    bool printLines;               // параметр -l,

    bool useInputFile;             // флаг "задан входной файл"

    bool useOutputFile;            // флаг "задан выходной файл"

    const char *inputFileName;     // имя файла для ввода, если задан

    const char *outputFileName;    // имя файла для вывода, если задан

} globalArgs_t;

typedef struct outputInfo_t        // структура с информацией для вывода

{

    char *str;                     // строка-палиндром

    int line;                      // номер строки в файле

} outputInfo_t;

int main(int argc, char **argv)

{

    static const char *optString = "x:n:l";  // доступные опции, первые две принимают аргумент

    const int default_str_array = 0x50;        // стартовые размеры выделяемой памяти для входной строки

    const int default_output_array = 0x20;    // и для массива выходных структур

    globalArgs_t globalArgs;

   

    // инициализируем опции по умолчанию

    globalArgs.maxLen = 0;

    globalArgs.minLen = 0;

    globalArgs.printLines = false;

    globalArgs.useInputFile = false;

    globalArgs.useOutputFile = false;

    globalArgs.inputFileName = "\0";

    globalArgs.outputFileName = "\0";

    int errorCode = 0;

    // внутренний код состояния для финальных действий

    // 0 - нужно освободить выделенную память и закрыть файл, если открыт

    // 1 - ошибка открытия входного файла. ничего делать не нужно

    // 2 - ошибка выделения памяти для строки. нужно закрыть файл, если открыт

    // 3 - ошибка выделения памяти для выходных структур. нужно закрыть файл, если открыт, и освободить строку

    // 4 - ошибка перераспределения памяти. нужно освободить выделенную уже память и закрыть файл, если открыт

    // 5 - ошибка открытия выходного файла. нужно освободить выделенную память

   

    int opt = getopt( argc, argv, optString );

    while( opt != -1 ) {

        switch( opt ) {

            case 'l':

                globalArgs.printLines = true;

                break;

                 

            case 'x':

                globalArgs.maxLen =  atoi(optarg);

                break;

                 

...

Скачать:   txt (14.7 Kb)   pdf (344.5 Kb)   docx (407.2 Kb)  
Продолжить читать еще 13 страниц(ы) »
Доступно только на Essays.club