Системалык программалоого киришүү
Системалык
программа-
колдонуучу тиркемелеринин иштөө жөндөмдүүлүгүн колдоо же аларды пайдалануунун
натыйжалуулугун жогорулатуу үчүн иштелип чыккан программа.
колдонмо
программасы-
илимдин, технологиянын, маданияттын белгилүү бир чөйрөсүндөгү көйгөйлөрдү чечүү
үчүн же колдонуучунун жеке муктаждыктары үчүн иштелип чыккан
программа.
Системалык
программалоо
системалык
программаларды иштеп чыгуу процесси болуп саналат.
Акыркы
мезгилде системалык да, прикладдык программалоонун да элементтерин камтыган орто
программалык камсыздоо (программалык камсыздоо) концепциясы пайда
болду.
Орточо
программа(middleware)
– универсалдуу маанидеги маселелердин кеңири классын чечүүгө багытталган,
экинчилик (программалык камсыздоонун өзү тарабынан иштелип чыккан) ресурстарды
башкаруучу программалардын жыйындысы. Мындай программалык камсыздоого
транзакцияларды башкаруучулар, маалымат базасынын серверлери, байланыш
серверлери жана башка программалык камсыздоо серверлери
кирет.
Иштеп
чыгуу куралдарынын көз карашынан алганда, орто программалык камсыздоо прикладдык
программага жакыныраак, анткени ал түздөн-түз баштапкы ресурстар менен иштебейт,
бирок бул үчүн системалык программалык камсыздоо тарабынан сунушталган
кызматтарды колдонот. Иштеп чыгуу алгоритмдери жана технологиялары көз карашынан
алганда, орто программа системалык программалык камсыздоого жакыныраак, анткени
ал ар дайым көп жана көп максаттуу колдонуунун татаал программалык продуктусу
болуп саналат жана ал системалык программалык камсыздоодогудай эле же окшош
алгоритмдерди колдонот.
Программалык
камсыздоону иштеп чыгуунун учурдагы тенденциясы системалык жана колдонмо
программалоонун көлөмүн кыскартуу болуп саналат. Программисттердин ишинин көбү
орто программада аткарылат.
Системалык
программалоо көлөмүнүн кыскарышы заманбап ОС концепциялары, объектиге
багытталган архитектура жана микроядро архитектурасы менен аныкталат, ага ылайык
система функцияларынын көбү утилиталарга чыгарылат, аларды орто программага да
кошууга болот. Колдонмо программалоо көлөмүнүн төмөндөшү заманбап орто
программалык продуктылар өз классынын көйгөйлөрүн чечүү үчүн инструменттердин
жана шаблондордун көбөйүп келе жаткан топтомун сунуш кылгандыгына
байланыштуу.
Системанын
олуттуу бөлүгү жана дээрлик бардык прикладдык программалык камсыздоо жогорку
деңгээлдеги тилдерде жазылган, бул аларды иштеп чыгууга, өзгөртүүгө жана
көчүрүүгө кеткен чыгымдарды азайтат.
Системалык
программалык камсыздоо системаны башкаруу программалары жана системалык тейлөө
программалары болуп бөлүнөт.
Башкаруу
программасы-
ресурстарды башкарууну жана тышкы чөйрө менен өз ара аракеттенүүнү, техникалык
каражаттардын иштешинде мүчүлүштүктөр пайда болгондон кийин системаны калыбына
келтирүүнү камтыган башкаруу функцияларынын комплексин ишке ашыруучу системалык
программа.
Кызмат
программасы(утилит)
- колдонуучуларга жана тейлөөчү персоналга жалпы кызматтарды көрсөтүүгө арналган
программа.
Башкаруу
программасы системанын иштеши үчүн зарыл болгон утилиталардын жыйындысы менен
бирге операциялык системаны түзөт.
Операциялык
системанын бир бөлүгү болгон утилиталардан тышкары, кошумча (милдеттүү эмес)
тейлөөнү аткарган башка утилиталар (ошол эле же үчүнчү тараптын өндүрүүчүсү)
болушу мүмкүн. Эреже катары, бул операциялык система үчүн программалык
камсыздоону иштеп чыгууну камсыз кылуучу утилиталар.
Программалоо
системасы-
программалоо тили тарабынан түзүлгөн система, бул тилде берилген программалардын
компилятору же интерпретатору, тиешелүү документтер, ошондой эле программаларды
аткарууга ылайыктуу формага даярдоо үчүн көмөкчү
каражаттар.
12.2.
Буйрук сабын колдонуу
Windows
NT/XP/Vista операциялык тутумунда түстүү графикалык интерфейстер менен катар
буйрук сабынын интерфейси сакталып калууда. Аны колдонуучулар сейрек колдонсо
да, системалык администратор ансыз кыла албайт. Буйрук сапты ачуу үчүн, "Старт"
баскычын басып, андан кийин "Run" опциясын тандаңыз. Ачылган терезеде cmd
(Windows командалык процессору) териңиз жана "OK" баскычын басыңыз. Ак тамгалар
менен кара терезе пайда болот - буйрук сабынын интерфейси. Экранда төмөнкүдөй
жазуу болушу мүмкүн.
C:\Документтер
жана Орнотуулар\Колдонуучунун аты>
Бул
"UserName" папкасынын ачык экенин билдирет, ал өз кезегинде "С" дискинде
жайгашкан "Документтер жана Орнотуулар" папкасында жайгашкан. ">" белгиси
буйрук киргизүүгө чакыруу болуп саналат. Эгерде сиз "dir" буйругун терип, андан
кийин "Enter" баскычын колдонуп киргизсеңиз, анда экранда "UserName" папкасында
жайгашкан папкалардын жана файлдардын тизмеси пайда болот. Эгер сиз башка
каталогго өтүүнү кааласаңыз, анда "cd" буйругун, андан кийин баргыңыз келген
жолду теришиңиз керек. Эгерде сиз процессордун башка ички буйруктарынын тизмеси
менен таанышууну чечсеңиз, анда "жардам" буйругун киргизишиңиз
керек.
Көпчүлүк
операциялык системалар, анын ичинде DOS жана UNIX, C++ программасы башталганда
бир же бир нече параметрди өткөрүүгө мүмкүндүк берет. Булар буйрук сабынын
параметрлери деп аталат жана жазылганда боштуктар менен ажыратылат. Бул
параметрлер түздөн-түз main() функциясына өткөрүлбөйт. Анын ордуна, main()
функциясы башка эки параметрди алат. Алардын бири буйрук сабынын аргументтеринин
саны (бүтүн сан). Салт боюнча, ал argc (аргумент саны - аргументтердин саны)
катары белгиленет. Экинчи параметр символ саптарына көрсөткүчтөрдүн массиви. Ал
көбүнчө argv (аргумент вектору) деп аталат. Иштете турган программанын аты
биринчи аргумент, андыктан ар бир программада жок дегенде бир аргумент
болот.
Кадимки
ыкма болуп өткөн жана алынган аргументтердин саны дал келгендигин текшерүү үчүн
argc аргументин текшерүү болуп саналат. 12.1 тизмеси буйрук сабынын
аргументтерин колдонуунун мисалын көрсөтөт.
Листинг
12.1. Программанын коду "TestProgram"
______________________________________________________________________
#include
<iostream.h>
int
main(int argc, char *argv[])
{
cout<<""<<argc<<"
аргументтери алынды...\n";
үчүн
(int i=0; i<argc; i++)
cout<<"argument
"<<i<<": "<<argv[i]<<endl;
кайтаруу
0;
}
Бул
кодду
буйрук
сабынан
иштетүү
керек.
Аткарылуучу
программа
файлынын
атын
тандадык
деп
ойлойлу:
TestProgram.exe. Андан
кийин
бул
файл
жайгашкан
папканы
киргизип,
чакыруу
белгисинен
кийин
теришиңиз
керек,
мисалы,
төмөнкүлөр:
TestProgram
Мен системалык программистмин!
Биз
төмөнкү
натыйжаны
алабыз:
6
аргумент
алынды...
аргумент
0: TestProgram
аргумент
1: I
2-аргумент:
ам
3-аргумент:
система
4-аргумент:
программист
аргумент
5:!
Көрүнүп
тургандай, argv[0] элементи программанын аталышы жана биринчи буйрук сабынын
аргументи argv[1].
Андан
ары лекцияда файлдын мазмунун үч түрдүү жол менен жөнөкөй ырааттуу көчүрүүнү
ишке ашырган кыска программалардын мисалдары келтирилген:
1.
C
китепканасын колдонуу
2.
Windows
API колдонуу.
3.
Windows
жардамчысы CopyFile функциясын колдонуу.
Файлдарды
ырааттуу иштетүү – бул эң жөнөкөй, эң кеңири таралган жана эң маанилүү функция,
ал эми дээрлик ар бир чоң программада мындай иштетүүдөн өткөн жок дегенде бир
нече файл болот. Ошондуктан, жөнөкөй файлдар менен иштөө программасы Windows
жана анын конвенциялары менен таанышууга эң сонун мүмкүнчүлүк
берет.
Жогорудагы
программаларда эң жөнөкөй каталарды текшерүү гана уюштурулган, ал аткаруу
стадиясында пайда болушу мүмкүн жана бар файлдар жөн эле кайра
жазылат.
12.3.
C стандарттык китепканасын колдонуу менен файлды
көчүрүү
12.2
Программасынан көрүнүп тургандай, C стандарттык китепканасы FILE I/O агымынын
объекттерин колдойт, алар азыраак болсо да, 12.3 Программасында киргизилген
Windows HANDLE объекттерине окшош.
Листинг
12.2. C китепканасын колдонуп файлдарды көчүрүү
______________________________________________________________________
/*
cpC файлдарын көчүрүү программасы.
C
китепканасын колдонуу менен ишке ашыруу. */
/*
cp file1 file2: file1 файлга2
файлга
көчүрүңүз.
*/
#
камтыйт <iostream.h>
#
<stdio.h> камтыйт
#
камтыйт <errno.h>
#
BUF_SIZE 256 аныктайт
int
main(int argc, char *argv[])
{
FILE
*in_file, *out_file;
char
rec[BUF_SIZE];
size_t
bytes_in, bytes_out;
if
(argc != 3) {
cout<<
"Колдонуу: cpc file1 file2\n";
кайтаруу
1;
}
in_file
= fopen(argv[1], "rb");
if
(in_file == NULL) {
error(argv[1]);
кайтаруу
2;
}
out_file
= fopen(argv[2], "wb"); if (out_file == NULL) {
error(argv[2]);
кайтаруу
3;
}
/*
Киргизүү
файлын
бир
эле
учурда
бир
жазууну
иштетиңиз.*/
while((bytes_in
= fread (rec, 1, BUF_SIZE, in_file))>0) {
bytes_out
= fwrite(rec, 1, bytes_in, out_file);
if
(bytes_out != bytes_in) {
perror("Жазуу
катасы.");
кайтаруу
4;
}
}
fclose(in_file);
fclose(out_file); кайтаруу 0; }
Жогорудагы
программанын
жардамы
менен
my.doc файлынын
мазмунун
my2.doc файлына
көчүргүбүз
келет
дейли.
Андан
кийин
буйрук
сабында
сиз
төмөнкүлөрдү
теришиңиз
керек
cpC
my.doc my2.doc
Файл
атын
кеңейтүүлөрү
көрсөтүлүшү
керек.
Аткарылуучу
файл
cpC.exe аталышы
керек.
Бул
жөнөкөй
мисал
Windowsта
дайыма
эле
колдонула
бербеген
бир
катар
жалпы
программалоо
божомолдорунун
жана
конвенцияларынын
визуалдык
иллюстрациясы
катары
кызмат
кыла
алат.
1.
Ачык
файл
объекттери
FILE структураларына
көрсөткүчтөр
менен
аныкталат
(UNIX бүтүн
файл
дескрипторлорун
колдонот).
NULL көрсөткүчү
жок
объектке
туура
келет.
Негизи,
көрсөткүчтөр
ачык
файл
объектинин
туткаларынын
бир
түрү.
2.
Fopen
функциясынын чалуусу файлдын текст файлы же бинардык файл катары иштетилиши
керектигин аныктайт. Текст файлдары, мисалы, саптын аягына белгилөө үчүн
колдонулган символдордун системага тиешелүү ырааттуулугун камтыйт. Көптөгөн
системаларда, анын ичинде Windows да, киргизүү/чыгаруу операциялары учурунда,
бул ырааттуулуктун ар бири автоматтык түрдө нөлдүк белгиге айландырылат, ал Си
тилинде линиялык терминатор катары чечмеленет жана тескерисинче. Биздин мисалда
эки файл экилик түрүндө ачылат.
3.
Ката
диагностикасы perror функциясынын жардамы менен ишке ашырылат, ал өз кезегинде
errno глобалдык өзгөрмөдөн fopen функциясын чакырганда пайда болгон
мүчүлүштүктүн мүнөзү жөнүндө маалымат алат. Анын ордуна, система менен эмес,
FILE объекти менен байланышкан ката кодун кайтарган ferror функциясын колдонсо
болот.
4.
fread
жана fwrite функциялары аргумент аркылуу эмес, түз иштетилген байттардын санын
кайтарат, бул программаны уюштуруунун логикасына олуттуу таасирин тийгизет. Терс
эмес кайтаруу мааниси ийгиликтүү окуу операциясын көрсөтөт, ал эми нөлдүн
кайтарылган мааниси файлдын аягындагы белгини окуу аракетин
көрсөтөт.
5.
fclose
функциясы FILE түрүндөгү объекттерге гана колдонулушу мүмкүн (ушуга окшош
билдирүү UNIX файл дескрипторлору үчүн туура).
6.
Киргизүү/чыгаруу
операциялары синхрондуу режимде аткарылат, башкача айтканда, программаны андан
ары аткаруудан мурун ал киргизүү/чыгаруу операциясынын бүтүшүн күтүшү
керек.
Си
китепканасын колдонгон ишке ашыруу UNIX, Windows жана ANSI C стандартын колдогон
башка системаларга көчмө болуу артыкчылыгына ээ.Ошондой эле, аткаруу жагынан C
китепканасынын киргизүү/чыгаруу ишке ашырылышы да жакшы. башка ишке ашыруулар .
Бирок, бул учурда программалар синхрондук киргизүү/чыгаруу операциялары менен
чектелүүгө аргасыз болушат, бирок бул чектөөнүн таасири Windows жиптерин
колдонуу менен бир аз алсырайт.
Алардын
UNIX эквиваленттери сыяктуу эле, C китепканасынын файл функцияларына негизделген
программалар файлга туш келди кирүү операцияларын аткарууга жөндөмдүү (fseek
функциясын же тексттик файлдарда fsetpos жана fgetpos функцияларын колдонуу
менен), бирок бул мурунтан эле татаалдыктын чеги болуп саналат. C стандарттык
китепканасынын киргизүү/чыгаруу функциялары, алар жогору көтөрүлө албайт. Бирок,
Visual C++ стандарттуу эмес кеңейтүүлөрдү камсыз кылат, алар, мисалы, файлды
кулпулоону колдоого алат. Акыр-аягы, C китепканасы файлдарды коргоону башкарууга
мүмкүндүк бербейт.
Жыйынтыктап
айтканда, жөнөкөй синхрондуу файл же консолдук I/O сизге керек болсо, анда
Windows'до иштей турган портативдик программаларды жазуу үчүн C китепканасын
колдонушуңуз керек.
12.4.
Windows аркылуу файлды көчүрүү
Программа
12.3 файлдарды көчүрүү маселесин чечет, бирок ал Windows API аркылуу
чечет.
Листинг
12.3. Windows API аркылуу файлдарды көчүрүү, биринчи ишке
ашыруу
________________________________________________________________
/*
cpW файлды көчүрүү программасы.
Windows
аркылуу ишке ашыруу.*/
/*
cpW file1 file2: file1 файлга
2 файлга
көчүрүңүз.*/
#include
<windows.h>
#include
<stdio.h>
#include
<iostream.h>
#BUF_SIZE
256 аныктаңыз
int
main(int argc, LPTSTR argv[]) {
HANDLE
hIn, hOut;
DWORD
nIn, nOut;
CHAR
буфери[BUF_SIZE];
if(argc
!= 3) {
cout<<"Колдонуу:
cpW file1 file2\n";
кайтаруу
1;
}
hIn
= CreateFile(argv[1], GENERIC_READ, 0, NULL, OPEN_EXISTING, 0,
NULL);
эгерде
(hIn==INVALID_HANDLE_VALUE) {
cout<<"Киргизүү
файлын
ачуу
мүмкүн
эмес.
Ката:
%x\n", GetLastError();
кайтаруу
2;
}
hOut
= CreateFile (argv[2], GENERIC_WRITE, 0, NULL, CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL, NULL);
if(hOut==INVALID_HANDLE_VALUE)
{
cout<<"Чыгуу
файлын
ачуу
мүмкүн
эмес.
Ката:
%x\n", GetLastError();
кайтаруу
3;
}
while(ReadFile(hIn,
Buffer, BUF_SIZE, &nIn, NULL)&&nIn > 0) {
WriteFile(hOut,
Buffer, nIn, &nOut, NULL);
if
(nIn != nOut) {
cout<<"Жазылуу
катасы: %x\n", GetLastError();
кайтаруу
4;
}
}
CloseHandle(hIn);
CloseHandle(hOut);
кайтаруу
0;
}
Бул
мисал
Windows программалоонун
кээ
бир
өзгөчөлүктөрүн
көрсөтөт.
1.
Программа
ар
дайым
бардык
керектүү
Windows функциясын
жана
маалымат
түрүнүн
аныктамаларын
камтыган
<windows.h> файлын
камтыйт.
2.
Бардык
Windows объекттери
Handle түрүндөгү
өзгөрмөлөр
менен
аныкталат
жана
ошол
эле
жалпы
CloseHandle функциясы
көпчүлүк
объекттер
үчүн
колдонулушу
мүмкүн.
3.
Мурда
ачылган
бардык
туткаларды
ресурстарды
бошотуш
үчүн
кереги
жок
болгондо
жабуу
сунушталат.
Ошол
эле
учурда
процесстер
аяктаганда
аларга
тиешелүү
туткалар
ОС
тарабынан
автоматтык
түрдө
жабылат
жана
объектке
тиешелүү
бир
да
тутка
жок
болсо,
анда
ОС
бул
объектти
жок
кылат
жана
тиешелүү
ресурстарды
чыгарат.
Эреже
катары, файлдар мындай жол менен жок кылынбайт.
4.
Windows
көптөгөн символикалык константаларды жана желектерди аныктайт. Адатта, алар көп
учурда бул объектинин максатын түшүндүрүп, узун аттары бар. INVALID_HANDLE_VALUE
жана GENERIC_READ аталыштары типтүү мисалдар.
5.
ReadFile
жана WriteFile функциялары функция аргументтери катары берилген иштетилген
байттардын санын эмес, логикалык маанилерди кайтарат. Бул белгилүү бир түрдө
циклдердин ишин уюштуруунун логикасын өзгөртөт. Байт эсептегичтин нөлдүк мааниси
файлдын аягындагы белгини окуу аракетин көрсөтүп турат жана ката деп
эсептелбейт.
6.
GetLastError
функциясы DWORD маанилери менен берилген тутум ката коддорун программанын
каалаган жеринде алууга мүмкүндүк берет. 12-3 тизмеси Windows түзүүчү текст ката
билдирүүлөрүн кантип көрсөтүү керектигин көрсөтөт.
7.
Windows
NT мурунку версияларына караганда күчтүүрөөк файлдарды коргоого ээ. Бул мисалда
чыгаруу файлы корголгон эмес.
8.
CreateFile
сыяктуу функцияларда кошумча параметрлердин бай топтому бар, бирок бул мисал
демейки маанилерди колдонот.
12.5.
Windows Helper функциясын колдонуу менен файлды
көчүрүү
Колдонуучунун
тажрыйбасын жакшыртуу үчүн Windows жалпы программалоо тапшырмаларын аткаруу үчүн
бир нече башка функцияларды бириктирген көптөгөн ыңгайлуу функцияларды камсыз
кылат. Кээ бир учурларда, бул мүмкүнчүлүктөрдү колдонуу жакшыртылышы мүмкүн.
Мисалы, CopyFile функциясын колдонуу файлды көчүрүү программасын абдан
жөнөкөйлөтөт (тизме 12-4). Башка нерселер менен катар, бул мурунку эки
программада өзүм билемдик менен 256га коюлган буфер жөнүндө тынчсыздануудан
бизди куткарат.
Листинг
12.4. Windows Helper функциясын колдонуу менен файлдарды
көчүрүү
______________________________________________________________________
/*
cpCF файлдарын көчүрүү программасы.
Ыңгайлуулук
үчүн ишке ашыруу
программаны
колдонуу жана аткаруу
Windows
CopyFile функциясы колдонулат. */
/*
cpCF file1 file2: file1 файлга2
файлга
көчүрүңүз.
*/
#include
<windows.h> #include <stdio.h>
#include
<iostream.h>
int
main (int argc, LPTSTR argv[]) {
if
(argc != 3) {
cout<<"Колдонуу:
cpCF file1 file2\n";
кайтаруу
1;
}
if(!CopyFile
(argv[1], argv[2], FALSE)) {
cout<<"CopyFile
функциясын
аткаруудагы
ката:
%x\n", GetLastError();
кайтаруу
2;
}
кайтаруу
0;
}
12.6.
Стандарттуу китепкананы колдонуунун максатка ылайыктуулугу
жөнүндө
12.6.
Стандарттуу китепкананы колдонуунун максатка ылайыктуулугу
жөнүндө
Файлдарды
иштеп
чыгууда
C китепканасын
кандай
учурларда
колдоно
аласыз
жана
кайсы
учурларда
Windows тутумунун
чалууларын
колдонушуңуз
керек?
Ушул
эле
суроону
C++ I/O агымдарын
же
.NET платформасы
тарабынан
берилген
I/O системасын
колдонуу
жөнүндө
берсе
болот.
Бул
суроолорго
оңой
жооптор
жок,
бирок
эгер
программалардын
Windows платформасынан
башка
платформаларга
көчүрүлүшү
алдыңкы
планда
болсо,
анда
тиркеме,
мисалы,
процессти
башкаруу
же
Windows-тун
башка
өзгөчөлүктөрүн
эмес,
файлды
иштетүүнү
гана
талап
кылган
учурларда,
С
китепканасына
жана
C++ I/O агымдарына
артыкчылык
берүү
керек.
C
китепканасы
колдоого
албаган
Windows функцияларына
файлдарды
кулпулоо
жана
карталоо
(жалпы
эстутум
аймактарын
бөлүшүү
үчүн
зарыл),
асинхрондук
киргизүү/чыгаруу,
өтө
чоң
файлдарга
туш
келди
жетүү
(4 ГБ
жана
андан
жогору)
жана
процесстер
аралык
байланыш
кирет.