Системалык программалоого киришүү

Системалык программа- колдонуучу тиркемелеринин иштөө жөндөмдүүлүгүн колдоо же аларды пайдалануунун натыйжалуулугун жогорулатуу үчүн иштелип чыккан программа.

колдонмо программасы- илимдин, технологиянын, маданияттын белгилүү бир чөйрөсүндөгү көйгөйлөрдү чечүү үчүн же колдонуучунун жеке муктаждыктары үчүн иштелип чыккан программа.

Системалык программалоо системалык программаларды иштеп чыгуу процесси болуп саналат.

Акыркы мезгилде системалык да, прикладдык программалоонун да элементтерин камтыган орто программалык камсыздоо (программалык камсыздоо) концепциясы пайда болду.

Орточо программа(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. Стандарттуу китепкананы колдонуунун максатка ылайыктуулугу жөнүндө

Файлдарды иштеп чыгууда C китепканасын кандай учурларда колдоно аласыз жана кайсы учурларда Windows тутумунун чалууларын колдонушуңуз керек? Ушул эле суроону C++ I/O агымдарын же .NET платформасы тарабынан берилген I/O системасын колдонуу жөнүндө берсе болот. Бул суроолорго оңой жооптор жок, бирок эгер программалардын Windows платформасынан башка платформаларга көчүрүлүшү алдыңкы планда болсо, анда тиркеме, мисалы, процессти башкаруу же Windows-тун башка өзгөчөлүктөрүн эмес, файлды иштетүүнү гана талап кылган учурларда, С китепканасына жана C++ I/O агымдарына артыкчылык берүү керек.

C китепканасы колдоого албаган Windows функцияларына файлдарды кулпулоо жана карталоо (жалпы эстутум аймактарын бөлүшүү үчүн зарыл), асинхрондук киргизүү/чыгаруу, өтө чоң файлдарга туш келди жетүү (4 ГБ жана андан жогору) жана процесстер аралык байланыш кирет.