(Borland C++Builder 6) [Статья 10] (TxRxV1)(FILE)(Process)(Tread)(stdio)(C/C++)

| 25.02.2016

(Borland C++Builder 6) [Статья 10] (TxRxV1)(FILE)(Process)(Tread)(stdio)(C/C++)

 

 

Описание :
В общем виде представленная мной библиотека содержит ф-ии упрощенной работы с файлами на ПК. Такое упрощение влияет на производительность, но в рамках малого использования файлов на ПК упрощение работы с ними приводит к увеличению скорости проектирования приложений. В мои обыденные задачи при создании приложения используемого файлы на ПК, это перекодировка файлов, чтение из файла и отправка его в какое-либо устройство или наоборот чтение информации из устройства в файл. При таких скудных задачах при работе с файлами было решено упростить себе жизнь и создать модуль (библиотеку) заточенную на удобство использования.

Дополнительной особенностью нашего модуля (библиотеки) является запуск процесса или потока. Эта тема не раскрыта и находится в зачаточном состоянии, но поставленные задачи исполняет. Запуск процесса это удобный способ писать раскодировщик отдельным приложением и запускать его из основного приложения, такой подход упрощает общую структуру проекта. Часто при работе с различными программируемыми микросхемами производитель предоставляет различные утилиты для удобства работы с выходными файлами САПР, поэтому знание как запустить утилиту производителя это весомое знание. В нашем варианте библиотеки такой роскоши нет, но как только объявлю проект где это будет нужно предоставлю пример как удобно это реализовать. Так сделано ввиду того, что приходится модернизировать свои модули подстраивая их под свои текущие нужды и на момент среза для создания проекта для сайта (TxRxV1) нужды в запуске какой-либо утилиты не было, но решено было немного пролить свет на эту интересную тему.

Второй вишенкой на торте является запуск процесса. Это весьма ценное знание при создании приложений для которых не подходит модель последовательного исполнения инструкций (кода). Порожденный поток в нашем приложении должен восприниматься как еше один своеобразный main в нашем приложении. Дело в том что, создав еще один поток, приложение раздваивается и начинает выполнятся параллельно или  якобы параллельно. Это налагает большую ответственность на разработчика, который должен следить за тем чтобы потоки не конфликтовали между собой при общении (обращении к одним и тем же данным).

Для работы с файлами на ПК  была использована библиотека <stdio.h>
stdio.h :  (от англ. standard input/output header — стандартный заголовочный файл ввода-вывода) заголовочный файл стандартной библиотеки языка Си, содержащий определения макросов, константы и объявления функций и типов, используемых для различных операций стандартного ввода и вывода. Функциональность унаследована от «портативного пакета ввода-вывода» («portable I/O package»), написанного Майком Леском из Bell Labs в начале 1970-х.[1]C++ ради совместимости также использует stdio.h наряду со схожим по функциональности заголовочным файлом cstdio.
Функции, объявленные в stdio.h, являются весьма популярными благодаря тому, что, являясь частью Стандартной библиотеки языка Си, они гарантируют работу на любой платформе, поддерживающей Си. Приложения на отдельных платформах могут, тем не менее, иметь причины для использования функций ввода-вывода самой платформы вместо функций stdio.h.
Стандарт определяет такое понятие, как поток — последовательный набор информации, который может быть входным или выходным, может быть предоставлен как файлом, так и устройством (например, терминалом)[2]. Поток может быть текстовым или бинарным. Текстовый поток — последовательность символов. При этом термин «символ» в данном контексте может означать как читаемый символ, так и управляющий символ (например, символ вертикальной табуляции или символ конца файла). Символы в текстовом потоке объединяются в строки. Каждая строка заканчивается символом новой строки либо символом конца файла. Бинарный поток — последовательность байтов, которые могут прозрачно представлять любую информацию (в том числе и текст). Поток может быть в одном из трёх состояний: неориентированном (по умолчанию), «широко символьном» или битовым. Состояние определяется последней функцией, которая использовала этот поток.

Работа с процессами и потоками большая тема, которой мы слегка касаемся в данной статье.
Проце́сс — программа, которая выполняется в текущий момент. Стандарт ISO 9000:2000 определяет процесс как совокупность взаимосвязанных и взаимодействующих действий, преобразующих входящие данные в исходящие.
Компьютерная программа сама по себе — это только пассивная совокупность инструкций, в то время как процесс — это непосредственное выполнение этих инструкций.
Также, процессом называют выполняющуюся программу и все её элементы: адресное пространство, глобальные переменные, регистры, стек, открытыефайлы и т. д.

Пото́к выполне́ния (тред; от англ. thread — нить) — наименьшая единица обработки, исполнение которой может быть назначено ядром операционной системы. Реализация потоков выполнения и процессов в разных операционных системах отличается друг от друга, но в большинстве случаев поток выполнения находится внутри процесса. Несколько потоков выполнения могут существовать в рамках одного и того же процесса и совместно использовать ресурсы, такие как память, тогда как процессы не разделяют этих ресурсов. В частности, потоки выполнения разделяют инструкции процесса (его код) и его контекст (значения переменных, которые они имеют в любой момент времени). В качестве аналогии, потоки выполнения процесса можно уподобить нескольким вместе работающим поварам. Все они готовят одно блюдо, читают одну и ту же кулинарную книгу с одним и тем же рецептом и следуют его указаниям, причём не обязательно все они читают на одной и той же странице.
На одном процессоре многопоточность обычно происходит путём временного мультиплексирования (как и в случае многозадачности): процессор переключается между разными потоками выполнения. Это переключение контекста обычно происходит достаточно часто, чтобы пользователь воспринимал выполнение потоков или задач как одновременное. В многопроцессорных и многоядерных системах потоки или задачи могут реально выполняться одновременно, при этом каждый процессор или ядро обрабатывает отдельный поток или задачу.

Статьи в помощь :
Уроки (C/C++) в Builder6

Это часть цикла взаимосвязанных статей TxRxV1:
1) (Borland C++Builder 6) [Статья 6] (TxRxV1)(SLIP)(ESC)(ESC)(Обмен)(Протокол)(C/C++)
2) (Borland C++Builder 6) [Статья 7] (TxRxV1)(FTDI)(ftd2xx)(FT_Write)(FT_Read)(Обмен)(C/C++)
3) (Borland C++Builder 6) [Статья 8] (TxRxV1)(CRC)(Контрольная сумма)(Обмен)(C/C++) 
4) (Borland C++Builder 6) [Статья 9] (TxRxV1)(Канал)(Протокол)(Связь)(Обмен)(C/C++) 
5) (Borland C++Builder 6) [Статья 10] (TxRxV1)(FILE)(Process)(Tread)(stdio)(C/C++)
6) (Borland C++Builder 6) [Статья 11] (TxRxV1)(Driver)(Поток)(Параллелизм)(stdio)(C/C++) 
7) (Borland C++Builder 6) [Статья 12] (TxRxV1)(Buf)(FIFO)(LIFO)(Pocket)(C/C++)
8) (Borland C++Builder 6) [Статья 13] (TxRxV1)(TestUse)(AVR)(uart)(Tx/Rx)(C/C++)
9) (Borland C++Builder 6) [Статья 14] (TxRxV1)(TestUse)(STM32)(uart)(Tx/Rx)(C/C++)

Библиотека FILE_izi_V2.h (ссылка на скачивание)

FILE_izi_V2.h

FILE_izi_V2.cpp


Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *