162
10 ФАЙЛДАРДЫ ПАЙДАЛАНУ
Файл – сыртқы есте сақтау қҧрылғыларында (магниттік дискілерде) орналас-
тырылған және мәлімет ӛңдеу, тасымалдау кездерінде біртҧтас кҥйде қарасты-
рылатын мәліметтер жиыны.
Файлдармен жҧмыс істеу ҥшін оларды, алдымен, ашу керек, яғни файл
туралы мәліметті – атын, адресін программаға белгілі ету қажет.
С тілінде файл ашу
fopen() функциясы арқылы орындалады. Ол сыртқы
қҧрылғыдағы физикалық файлды, мысалы, А:\NUR.DAT, программадағы оның
логикалық атымен байланыстырады. Логикалық ат дегеніміз – файлға нҧс-
қауыш, яғни файл туралы мәлімет сақталатын жады аймағына сілтеме жасау.
Файлға нҧсқауыш сипатталуы тиіс.
Сонымен, файлдармен жҧмыс істегенде нҧсқауыштар қолданылады. Файлға
нҧсқауыш мынадай тҥрде сипатталады:
FILE *fp;
мҧндағы FILE типі –
тақырыптық файлында анықталған қҧрылым. Бҧл
нҧсқауышты кӛрсетілген файлмен сол файл ашылғаннан бастап, байланысты-
рып қоюға болады. Ол ҥшін келесі функция пайдаланылады:
fopen ("файл адресі/аты","қатынасу типі");
ол файлға нҧсқауыш мәнін қайтарады немесе қате болса, NULL мәнін береді.
Мысалы, мынадай оператор орындалуы нәтижесінде
fp = fopen ("ex1.txt", "w");
жҧмыс бумасындағы ex1.txt файлы оған мәлімет жазу (write) ҥшін ашылады,
ал программада бҧл файлды fp нҧсқауышы арқылы пайдаланамыз (яғни fopen()
функциясы файлдың сыртқы атын оның программада қолданылатын ішкі
логикалық атымен байланыстырады).
Сонымен, файлды ашатын fopen() функцияcының жалпы жазылуы:
fp = fopen(name, mode)
мҧнда fp – файлға сілтейтін нҧсқауыш; name – файлдың адресін де кӛрсетуге
болатын аты, кӛбінесе символдық тіркес арқылы жазылады; mode – файл
қандай режимде қолданылатынын кӛрсететін параметр, бҧл да символдар
тіркесімен тӛмендегідей тҥрде жазылады:
"r" – файлды оқу ҥшін ашу (файл бҧрын ашылған болуы тиіс);
"w" – бос файлды информация жазу ҥшін ашу;
"a" – файл соңына мәлімет қосып жазу ҥшін оны ашу;
"r+"– файлдан информация оқу және оған информация жазу ҥшін ашу);
"w+"– бос файлдан информация оқу және оған мәлімет жазу ҥшін файл ашу
(бҧрын файл болса, ол ӛшіріледі);
"a+"– файлдан информация оқу және оның соңына информация қосып жазу
ҥшін ашу).
"t" – файл мәтіндік (текстік) режимде ашылады, ол rt, wt, at, т.с.с. болып
кӛрсетіле береді.
"b" – файл екілік режимде ашылады, rb, wb, ab, т.с.с. болып кӛрсетіле береді.
Келісім бойынша файл кӛбінесе мәтіндік режимде ашылады.
163
Файлмен жҧмыс істеп болған соң, оны жабу ҥшін келесі функция қолданы-
лады:
fclose (файл_нұсқауышы).
Файлға мәлімет жазу/оқу ҥшін жалпы енгізу/шығару функциялары тәріздес
бірсыпыра функциялар пайдаланылады:
fprintf(), fscanf(), fputs(), fgets(), getc(), putc(), fgetc(), fputc().
Бҧлардың ішіндегі
getc()/fgetc(), putc()/fputc() функциялары әрекеттері
ҧқсас, айырмашылықтары тек
getc() пен
putc() макроанықтаулар да, aл
fgetc()
және
fputc() – нағыз функциялар болып табылады.
Барлық файлдық функциялар прототиптері
файлында орналасқан.
Файлдардан мәлімет жазу/оқу әрекеттерін ҥш топқа бӛлуге болады:
- символдарды енгізу/шығару операциялары;
- сӛз тіркестері жолдарын енгізу/шығару операциялары;
- блок бойынша енгізу/шығару операциялары.
Символдарды енгізу/шығару операцияларында файлдан бір ғана символ
оқылады немесе оған бір символ жазылады. Мысалы:
fgetc(FILE *fp);
ашылған файлдан символ оқиды.
fputc(int ch,FILE *fp); ch символы кодын файлға жазады.
Сӛз тіркестері жолдарын енгізу/шығару операцияларында бір мәлімет
алмасуы кезінде файлдан сӛз тіркесі жолдары оқылады немесе оған сӛз тіркесі
жазылады. Мысалы:
gets(char *S); файлдан мәлімет байттарын '\n' символы кездескенше
біртіндеп оқиды да, оларды S тіркесіне орналастырып, '\n' символын ‗\0‘ (нӛл-
терминатор) белгісіне айналдырады.
fgets(char *S,int m,FILE *fp); fp тҥрінде сипатталған файлдан байттарды
оқып, оларды '\n' символы кездескенше немесе m байт оқылып біткенше S
тіркесі мәні ретінде жазып шығады.
Блок бойынша енгізу/шығару операцияларында мәліметтер алмасу
олардың бір блогын толық қамтиды. Мысалы:
fread (void *ptv, int size, int n, FILE *fp);
мҧнда fp файлынан әрқайсысы size байттан тҧратын мәліметтің n блогы ptv
нҧсқауышы кӛрсетіп тҧрған жады аймағына оқылады (оқылатын блок ҥшін
алдын ала орын дайындап қою қажет).
fwrite (void *ptv, int size, int n, FILE *fp);
мҧнда ptv нҧсқауышы кӛрсетіп тҧрған жады аймағында орналасқан әрқайсысы
size байттан тҧратын мәліметтің n блогы ашық тҧрған fp файлына жазылады.
10.1 fprintf және fscanf функцияларын пайдалану
fprintf
файлға информация жазу ҥшін, ал fscanf файлдан информация
оқу ҥшін қолданылады. Олардың жалпы жазылу тҥрі:
fprintf(fp, “спецификация шаблоны”, p);
мҧндағы p – ӛрнек;
fscanf(fp, “спецификация шаблоны”, адрес);