Кіріспе
Мен қарастыратын жұмыс “Ағындардың байланысуы”. Бул курстық жұмыста ағын не екенін және ағын С++ тілінде қандай рөл атқаратынын, қай жерде, не үшын қолданатынымызды, байланысын карастырам. Ағын бізге қай жерде қолданатынымызды, файлдармен жұмыс кезінде қалай байланыстыру керек екенін айтамын. Оның басты кітапxанасы, ағын кандай түсінік екенін қарастырамын. Ағын жайлы мәлімет берейін. Ағын – бұл абстракты ұғым. С++ ағындары, С стиліндегі функциядан айырмашылығы оның шығару – енгізуінде, стандарттармен жұмыс секілді сенімді жұмысты қамтамасыз етеді, қолданушы анықталған мәліметтер типінің, сонымен қатар біркелкі және түсінікті синтаксис.
Мәліметтердің ағынының оқылуы шығарумен аталады. Байттардың жүйелілік сияқты ағын анықталады және нақтылы құрылғыдан тәуелді болмайды, қайсымен айырбастау шығарылады (оперативті жадта, дискідегі файл, клавиатура немесе принтер). Ағынмен айырбастау үшін мәліметтің берілуі жылдамдықтың арттырумен құрылады, ереже бойынша, буфер – оперативті жадының арнайы облыс арқылы өтеді. Мәліметтің берілуі буфер толтырылғаннан кейін шығарылады, ал буфер таусылса, онда енгізу.
Айырбастау ағыны енгізулер шығаруда, оның екі жақты бағытта бөлуге болады, ағын жұмыс істейтін құрылғының түрімен ағынды стандартты және файлдық, жолдық болып бөлуге болады.
Стандартты ағындар мәліметтерді пернетақтадан және экраннан жіберуге арналған, файлдықтар ағындар – мәлімет тасушы мен файл арасындағы информациямен айырбастайды, ал жолдық ағын – оперативті жадтағы массивтің символымен жұмыс жасайды.
Ағын үшін С++ кітапханасында кластардың иерархиясы құрылады, ios және streambuf базалық кластарында құрылған. ios класы жолы мен әдістің шығару мен енгізуден тұрады, streambuf класы ағынды буферлеумен қамтамасыз етіледі.
Көпағындылықтың тарихы
Көпағындылықты қолданудың алғашқы шарттары 1970-ші жылдарда кеңестік компьютерлік аппаратураны құрастырушылар мен бағдарламашылар көмегімен жасалған. 1979 жылы құрылған "Эльбрус-1" аппаратурасында және операциялық жүйеде үрдістің тиімді тұжырымдамасын қолданды. "Эльбрусе" үрдісінде көбінесе өзінің стектерімен сипатталды. "Эльбрусе" үрдісінде басқа үрдістер болмағандықтан виртуалды жадының жалпы кеңістігінде орындалады және жеңілдетілген үрдістер болады . Көпағындылықтың тұжырымдамасы 1980 жылдары UNIX операциялық жүйесінде және оның диалектерінде қалыптаса бастады. Көпағындылықтың дамуы AT&T фирмасындағы UNIX диалектісінде болды, оның негізінде Solaris жүйесі құрылды. Бұның барлығы POSIX стандартында UNIX-тің негізгі мүмкіндіктерімен көрсетілді.1990 жылдардың ортасында көпағындылық қосылған ОС Windows NT шығарылды.API жүйесіндегі әртүрлі операциялық жүйелердің көпағындылығы ерекше болды. Сондықтан да, жоғары деңгейлі тілдерде жазылған көпағынды бағдарламалар бір платформадан басқа платформаға ауыспайтындықтан ыңғайсыз болды.
Спецификацияның ерекшеліктеріне және әр түрлі жүйелерде көпағындылықтың іске қосылу себептеріне байланысты Бьярн Страуструп өзі құрған C++ тіліне көпағындылықты қоспады, бірақ оның кітапханасының базалық негізін құрады. С++тіліндегі бағдарламашылар нақты операциялық жүйелердің кітапханасында және жүйелік шақыртулар деңгейінде қолданды.
1995 жылдары шығарылған Java және Java-технологиясының авторлары маңызды алға қадам жасады. Java-да алғаш рет көпағындылық базалық кітапханалар және тілдің конструкторлық деңгейінде іске асырылды. Java-да арнайы әдістер және тілдің конструкциясы түрінде ұсынылған ағын және операция -Thread классы енгізілген . 2000 жылы пайда болған NET платформасы Java идеясын дамытушы механизмін ұсынды . Әртүрлі операциялық жүйелерде және әртүрлі платформаларда көпағындылық бағдарламаларды құрастыру қазіргі уақыттқа дейін сақталады . Қолданбалы бағдарламалар үшін Java және .NET платформаларында көпағындылықты іске асыруды ұсынады. Ол жоғары дегейлі түсініктер мен конструкцияларды қолдануға мүмкіндік береді. Бірақ, операциялық жүйеге арналған курсымызда көпағындылықтың жүйелік сұрақтарына және операциялық жүйелерде іске асуына көп көңіл бөлеміз.
Ағындар және ағындық кластар байланысы
Ағын– бұл абстракты ұғым . С++ ағындары, С стиліндегі функциядан айырмашылығы оның шығару - енгізуінде , стандарттармен жұмыс секілді сенімді жұмысты қамтамасыз етеді , қолданушы анықталған мәліметтер типінің, сонымен қатар біркелкі және түсінікті синтаксис .
Мәліметтердің ағынының оқылуы шығарумен аталады. Байттардың жүйелілік сияқты ағын анықталады және нақтылы құрылғыдан тәуелді болмайды , қайсымен айырбастау шығарылады ( оперативті жадта, дискідегі файл, клавиатура немесе принтер ). Ағынмен айырбастау үшін мәліметтің берілуі жылдамдықтың арттырумен құрылады, ереже бойынша, буфер – оперативті жадының арнайы облыс арқылы өтеді. Мәліметтің берілуі буфер толтырылғаннан кейін шығарылады , ал буфер таусылса, онда енгізу.
Айырбастау ағыны енгізулер шығаруда, оның екі жақты бағытта бөлуге болады, ағын жұмыс істейтін құрылғының түрімен ағынды стандартты және файлдық, жолдық болып бөлуге болады.
Стандартты ағындар мәліметтерді пернетақтадан және экраннан жіберуге арналған, файлдықтар ағындар – мәлімет тасушы мен файл арасындағы информациямен айырбастайды, ал жолдық ағын – оперативті жадтағы массивтің символымен жұмыс жасайды.
Ағын үшін С++ кітапханасында кластардың иерархиясы құрылады, ios және streambuf базалық кластарында құрылған. ios класы жолы мен әдістің шығару мен енгізуден тұрады, streambuf класы ағынды буферлеумен қамтамасыз. Бұл кластардан i stream енгізу үшін ostream шығару үшін қолданылады. Ең соңғы екі класс iostream класы үшін базасы болып табылады. Екі бағыттағы ағындық класта табылады, екі ағындық класс төменде класс иерархиясында файлдық және жолдық ағын құрылады. Ары қарай класс ағынында пайдаланылатындар саналады. Иерархия схемасы
streambuf
(iostream.h)
filebuf
(fstream.h)
conbuf
(constream.h)
strstreambuf
(strstream.h)
Ios класы форматталған енгізуді - шығаруға арналған құралдар және қателердің тексерулері асырайды .
Иерархия схемасы
ios
ifstream
fstream
strstream
iostream
istrstream
istream
ostream
strstreambase
fstreambase
ostrstream
ofstream
ios — ағындардың базалық класы;
istream — ағындардың енгізу класы;
ostream — ағындардың шығару класы;
iostream — екі бағыт беру ағындардың класы;
istringstream — жолдық ағындардың енгізу класы;
ostringrstream — жолдық ағындардың шығару класы;
stringstream — екі бағыт беру жолдық ағындардың класы;
ifstream — файлдық ағындардың енгізу класы;
ofstream — файлдық ағындардың шығару класы;
fstream — екі бағыт беру файлдық ағындардың класы.
Тақырыптықтарды файлдарда кластардың мынадай сипаттаулары болады:
< ios > — ағындардың енгізу / шығару базалық класы;
< iosfwd > — алдын - ала жариялаудың енгізу / шығару құралы;
< istream > — енгізу ағынының шаблоны;
< ostream > — шығару ағынының шаблоны;
< iostream > — ағындармен енгізу / шығару стандартты объектілері және
операциялары;
< fstream > — файлдарға енгізу / шығару ағындары;
< sstream > — жолдарға енгізу / шығару ағындары;
< streambuf > — буферлеу енгізу / шығару ағындары;
< iomanip > — манипуляторлар
