Осовная укрупненная схема инормационной системы представляет собой сочетание 3 х компонентов
Память<->алгоритм<->Стема ввода вывода
Инструменты ввода и вывода информационной системы в целом и программы в частности являются важной и сложной составляющей которую не следует путать с остальными частями ввод вывод программы рассчитан на взаимодействие с другими программы независимо функционирующими программами нередко несколько разлиных программ собираются в единый комплекс и передача данных между ними превращается во внутренный процесс однако хороший стиль пргаммирования требует чтобы грамотный ввод вывод был организован как на уровне всео комплекса так и на уровне отдельных компонентов. Будем рассматиривать ввод вывод на примере отдельной программы
На урвне тдельной программы т е самостоятельного запущенного процесса операционной системы
Внутренние данные определены пренадлежащей программе области оперативной памяти и статическими динамическими переменными с которыми програама может оперировать. То что делается присвоением и чтением переменных это внутренняя память программы остальные пути полуения передачи данных относятс к внешнему вводу выводу. Это в основном 3 инструмента.
1 это прараметры вызова программы. Осуществляется с помощью аргументов функции майн традиционно их называют arg v, arg c 2. Систмные вызовы функции ОС через API 3. Это стандартный ввод вывод через виртуальное устройство. Включает в себя то что называется простым вводом с клавиатуры и простым выводом на экран. 2 основных инструмента в С++ это iostream, на языке С основным средством является библиотека
Stdio stdin stdout
Аргументы программы межпрограммные взаимодействия аргументы программы (аргументы программной строки) являются базовым и самым простым способом подачи данных программе данные подаются только один раз при запуске и только в текстовом виде .
Запуск на выполнение любой программы осуществляется с помощью системных вызовов. (функций ос) является текстовая строка в начале текствовй строки стоит имя запускаемой программы. (возможно с полным путем из директории в котором он лежит) именно в этой строке после имени программы можно перечислить произвольное количество аргументов программы. Разделителем аргументов является пробел.
D:\mydir myprog.exe
D:\mydir\myprog.exe_abc_pqrst_1234 можно вызвать на выполнение эту программу подав ей 3 аргумента
Способы запуска для пользователя основным способом запуска является инерпритатор командной строки включен в состав программы фарманагер может вызываться cmd.exe
Для удобства один или несколько элементов командной сткроки могут ыть записаны в файл .bat .cmd это тектовый файл создаваемый любым текстовым редактором. Пиостановка выполнения bat файла строка PAUSE создание windows ярлыка в нем есть строчка исполняемая программа где мождно указать аргументы командной строки. Программные вызовы осуществляются с соотвествующими командами которые имеются во многих языках программирования. На языке Си для запуска на выполнения другой пограммы есть функция
Execl(путь ,аргумент 0,…, аргумент N);
Execl(“D:\mydir”,”myprog.exe”,”1324”,”asdfghjk”);
Execv(path,argV[]);
Получение дополнительных параметров вызова для обработки получаемых в командной строке данных у функции мэйн могут быть добавлены 2 аргумента main(int argC,char*argv[]); иногда аргв пишут char**argv;
Argv – представляет собой массив из строк нулевой элемент этого массива это имя программы с путем.
Myprog.cpp то cout<< argv[0]; то на экран будет выведены аргумент программы.
Поскольку все аргументы текстовые то для получения числовых значений нужно делать преобразования пример int k=atoi(argv[3]); //k==1234. Arg c –wtkjxbcktyyfz gthtvtyyfz? Rjkbxtcdj gjlfyys[ gfhfvtnhjd /размер массива аргВЭ
3. стандартный ввов вывод через виртуальное устройтсво.
Основная система ввода вывода функционирует на протяжении всего времени работы программы. И предоставляет канал для взаимодействия с практически всеми другими элементами информационной системы и с пользователем. Следует иметь ввиду что ввод вывод для пользователя на экран и с клавиатуры принципиально ничем не отличается от ввода вывода с различными устройствами, основан на тех же функциях на тех же инструментах. Причем идеология языка си (уноследованная от юникс) все устройства понимает как файл. Для организации ввода вывода вводтися некое виртуальное понятие – устройство ввода вывода. Реализуется средствами компилятора и ОС и для программиста представлена в виде специальной структуры носящей имя FILE в программезадается переменная типа указатель на файл. FILE *f/ через такой вид осуществляется ввод. Структура… поля которого содержат информацию о свойствах файла. Примичание. В некоторых книгах распространено суждение что файл это составной тип данных, наряду с массивом и структурами. Это не верно. File – средство …
Через переменную типа файл можно обращаться к различным физическим устрйствам. Устройство ввода это клавиатура, файл на жестком д, этот порт и устройство, модем …, а вывода монитор принтер файл на винчестере физический порт , примечание. Многие современные устройсва не обеспечивают доступ к себе через виртуальные файлы языка си. Общение с ними перенесено в системные вызовы ОС. В одну файловую переменную может быть подсодинено любое из перечисленных физических устройств. Более того можно менять подключение к одному другому к третьему.
Подключение к устрйству – открытие файла. Fopen(name,)
Con –console, prn – printer, lpt1…n – ports,
«r» read “w”write ”a”в конец append, для режимов“r”и”a” для некоторых физич устройств режим а либо не дейстрвует либо проявляет себя так же как режим w многие утройства поддерживают либо только запись либо только чтение, неподходящие условия приводят к ошибке. В некоторых случаях один и тот же файл может быть открыт разными программами а в других нет. Навярника такая ситуация происходит на открытии на запись при открытии на чтение зависит от обстоятельств ,ОС и технич. особенностей.
Также есть дополнительные режимы rt wt at – текстовый ввод вывод . rb wb ab запись в двоичном виде.
Wb+ одновременно и запись и чтение.
На выходе команды фопен адрес файловой структуры. Если открытие файла или устройства произошло успешно 0 если не удалось открыть.
F=fopen(“myfile.txt”,”rt”) f=fopen(“D;\medir\ksfhkwhrkwj.dat”,”wb”) создание нового файла и запись в него в бвоичном режиме. А=fopen(“prn”,”wt”);
If (f==NULL){ сообщение об ошибке}
Правило хорошего тона закрывать ненужные файлы. Ввод вывод файла осуществояется через промежуточный буфер, который физически сбрасывается в файл по мере накопления. Т е если в программе выполнелась команда записи в файл то в течении какого то времени информация хранится в буфере и физически в файл не попадает. Очень часто если к файлу открытому на запись при завершении работы пограммы не применена команда fclouse то какая т очасть последней записанной информации не попадает в файл.
Не следует оставлять команду фклоузе на конец программы, следует закрывать после прочтения.
Процесс ввода –вывода осуществляет взаимодействие алгоритма с некоторым независимым устройством
И продолжение процесса обмена данными зависит от них обоих. В устройстве внешнем (особенно в случае ввода данных) может быть ограничен объъъъем пставляемых данных. Особенно если внешним устройством является файл. Специальным знаком исчерпаия данных является конец файла. EOF() которая сообщает был лли достигнут конец файла. Ненулевое значение eof() означает что предпринята попытка чтения после конца файла 0 – конец файла не достигнут 1 – достигнут конец файла.
Например типичным алгоритмом прочитывания всего файла
FILE * f:fopen(“myfile.dat”,”r”);
While (!feof(f))
{char c=fgetc(f);
C …
}
Fclose(f);
Комана fopen() cтавит указатель позиции в файле в начало, операции чтения сдвигает указатель позиции на некоторое расстояние. Таким образом….
Точнее если соответствующее устройство ввода вывода физически физически позволяет такого рода операцию то команда fseek() устанавливает произвольную позицию чтения в файле. Fseek(f,p,orig)файл f смещение P? j,tcgtxtyye. Gfhfvtnhjv orig, при этом orig =0 от начала файла 1 - от текущей позиции 2 – от конца файла
Ftell (f) сообщает о текущей позиции в файле f . прим. К устройствам типа консоль или модем функция изменения позиции не применимы.