Файлдар



1. Файлдар
2. Файлды оқудағы қарапайым программалар
3. Файлды сығудың қарапайым программасы
4. fgets() функциясы
5. fputs() функциясы
6. ЕРКІН ҚОЛ ЖЕТКІЗУШІЛІК: fseek()
Файл деп физикалық құрылғыда ақпаратты сақтаудың тәсілін атаймыз. Файл дегеніміз – дисктегі файлдан терминалға дейін барлығына қолданылатын түсінік.
Си тілінде файлдармен жұмыс істеуге арналған операторлар жоқ. Барлық қажетті құбылыстар стандартты кітапханадағы функциялардың көмегімен орындалады. Олар диск, принтер, коммуникациялық каналдар және т. б. әртүрлі құрылғылармен жұмыс істеуше мүмкіндік береді. Бұл құрылғылардың бір-бірінен айырмашылықтары өте көп. Бірақ файлдық жүйе оларды ағым деп аталатын біріккен абстрактты логикалық құрылғыға айналдырады.
Си тілінде ағымдардың екі түрі бар: тексттік (text) және екілік (binary).
Тексттік ағым дегеніміз – символдық жүйелілік. Символдарды ағымнан экранға жіберген кезде, олардың белгілі бір бөлігі шығарылмайды (мысалы, жаңа жол символы).
Екілік ағым – сыртқы құрылғыдағыға сәйкес келетін байттық жүйелілік.
Файлдан ақпаратты оқымастан немесе жазбастан бұрын бұрын, ол ашылып, ағыммен байланысып тұруы керек. Бұны fopen() кітапханалық функциясының көмегімен орындауға болады. Ол файлдың сыртқы көрінісін алады (мысалы, c:\my_prog.txt) да, оны бағдарламада әрі қарай қолданылатын ішкі логикалық атпен байланыстырады. Логикалық ат дегеніміз – қажетті файлға сілтеуіш. Оны анықтау қажет. Ол, мысалы, былай орындалады:
FILE *fp;
Мұнда, FILE – stdio.h стандартты тақырыптық файлда өрнектелген типтің аты, ал fp – файлға сілтеіш. fopen() функциясына жолығу программада мынадай түрде орындалады:
fp = fopen(файлдың спецификациясы, "файлдың қолданылу тәсілі");
Файлдың спецификациясы (яғни аты мен оған жету жолы) мысалы мынадай түрде бола алады:
"c:\\my_prog.txt" - с: дискісінде my_prog.txt файлы үшін.
Файлдың қолданылу тәсілдері келесі символдармен беріледі:
r – файлды оқу үшін ашу; (файл бұрын ашылған болуы тиіс)
w – бос файлды информация жазу үшін ашу;
а – файл соңына мәлімет қосып жазу үшін ашу;

Файлдар
Файл деп физикалық құрылғыда ақпаратты сақтаудың тәсілін атаймыз. Файл
дегеніміз – дисктегі файлдан терминалға дейін барлығына қолданылатын
түсінік.
Си тілінде файлдармен жұмыс істеуге арналған операторлар жоқ. Барлық
қажетті құбылыстар стандартты кітапханадағы функциялардың көмегімен
орындалады. Олар диск, принтер, коммуникациялық каналдар және т. б. әртүрлі
құрылғылармен жұмыс істеуше мүмкіндік береді. Бұл құрылғылардың бір-бірінен
айырмашылықтары өте көп. Бірақ файлдық жүйе оларды ағым деп аталатын
біріккен абстрактты логикалық құрылғыға айналдырады.
Си тілінде ағымдардың екі түрі бар: тексттік (text) және екілік
(binary).
Тексттік ағым дегеніміз – символдық жүйелілік. Символдарды ағымнан
экранға жіберген кезде, олардың белгілі бір бөлігі шығарылмайды (мысалы,
жаңа жол символы).
Екілік ағым – сыртқы құрылғыдағыға сәйкес келетін байттық жүйелілік.
Файлдан ақпаратты оқымастан немесе жазбастан бұрын бұрын, ол ашылып,
ағыммен байланысып тұруы керек. Бұны fopen() кітапханалық функциясының
көмегімен орындауға болады. Ол файлдың сыртқы көрінісін алады (мысалы,
c:\my_prog.txt) да, оны бағдарламада әрі қарай қолданылатын ішкі логикалық
атпен байланыстырады. Логикалық ат дегеніміз – қажетті файлға сілтеуіш. Оны
анықтау қажет. Ол, мысалы, былай орындалады:
FILE *fp;
Мұнда, FILE – stdio.h стандартты тақырыптық файлда өрнектелген типтің
аты, ал fp – файлға сілтеіш. fopen() функциясына жолығу программада мынадай
түрде орындалады:
fp = fopen(файлдың спецификациясы, "файлдың қолданылу тәсілі");
Файлдың спецификациясы (яғни аты мен оған жету жолы) мысалы мынадай
түрде бола алады:
"c:\\my_prog.txt" - с: дискісінде my_prog.txt файлы үшін.
Файлдың қолданылу тәсілдері келесі символдармен беріледі:
r – файлды оқу үшін ашу; (файл бұрын ашылған болуы тиіс)
w – бос файлды информация жазу үшін ашу;
а – файл соңына мәлімет қосып жазу үшін ашу;
r+ - файлдан информация оқу және оған информация жазу үшін ашу;
w+ - бос файлдан информация оқу және оған мәлімет жазу үшін файл ашу ;
(бұрын файл болса, ол өшіріледі);
a+ - файлдан информация оқу және оның соңына информация қосып жазу үшін
ашу;

rb – екілік файлды оқу үшін ашу;
wb-жазуға арналған екілік файл құру;

ab-екілік файлға қосу;

r+b- оқуға және жазуға арналған екілік файл ашу .

w+b- оқуға және жазуға арналған екілік файл құру.

a+b- берілген мүмкіндіктерімен оқуға және жазуға арналған екілік

файл қосу;

rt-оқуға арналған текстік файл ашу;

wt- жазуға арналған текстік файл құру;

at- текстік файл қосу;

r+t- оқуға және жазуға арналған текстік файл ашу .

w+t- оқуға және жазуға арналған текстік файл құру.

a+t- берілген мүмкіндіктерімен оқуға және жазуға арналған текстік

файл қосу;

Егер t және b берілмесе (мысалы, r, w немесе a), онда ол глобальды
өзгергіш _fmode мағынасымен анықталады.

Егер fmode=0_BINARY болса, онда файлдар екілік режимде ашылады, ал егер
_fmode=0_TEXT болса, онда тексттік режимде ашылады. 0_BINARY и 0_ТЕXТ
константалары fcntl.h файлында анықталған.
r+b түріндегі жолдарды rb+ формасында да жазуға болады.
Егер fopen( ) функциясына жүктеу нәтижесінде қате пайда болса, онда ол NULL
константасын қайтарады.
Келесі тәсіл бойынша файлды ашуға болады:
if ((fp = fopen("c:\\my_prog.txt", "rt")) == NULL)
{
puts("Файлды ашу мүмкін емес\n");
exit(1);
}

Файлмен дұмыс аяқталған соң ол жабылуы тиіс. Ол fclose( ) функциясының
көмегімен жүзеге асады. Оның жазылу түрі:

int fclose(FILE *fp);
Операция сәтті аяқталса fclose( ) функциясы нуль мағынасын қайтарады. Кез-
келген өзге мән оның қате екенін көрсетеді.
Файлды қосу.

Егер функция макроанықтамасы ретінде берілсе, #include диррективасы арқылы
оның анықтамасы жазылған файлды іске қосуға болады. Бұндай файлдар жиі
тақырыптық файлдарға жинақталады. Мысалы, кейбір жүйелер құрамында
макроанықтамасы бар, бас әріп, цифра және т.б. символдар типін көрсететін
ctype.h файлынан тұрады.

Кітапхананы қосу
Компиляция немесе программаның жүктелуі кезінде кітапхананы таңдау
мүмкіндігі бар. Мысалы, біздің жүйемізде құрамында компиляцияланған
кітапханалық функциялар нұсқасы бар lc.lib файлы бар болсын, және біз IBM
PC байланыс редакторына осы кітапхананы қолдануды ұсынамыз. Тіпті өзінің
стандартты кітапханасын автоматты түрде басқаратын жүйе сирек қолданылатын
функциялардың басқа да кітапханаларынан тұруы мүмкін, және осы
кітапханаларды сәйкес белгілерін компиляция уақытында көрсету арқылы, дәл
шақырған жөн.
Байқағанымызша біз барлық жүйелердің ерекшеліктерін қарастыра алмаймыз,
бірақ келесі үш мысал сізді не күтіп тұрғанын көрсетеді. Енді біраз
функцияларды қарастырайық:

Кітапханалық функциялар

Енді енгізу-шығару функцияларына мысал келтірейік:
getchar( ) * символды алу *
putchar( ) * символды баспаға шығару *
gefs( ) * тіркесті алу *
puts( ) * тіркесті баспаға шығару *
scanf( ) * форматталған енгізуді алу *
printf( ) * форматталған енгізуді баспаға шығару *
Енді тіркестермен жұмыс істейтін функцияларға мысал келтірейік:

strlen( ) * тіркестің ұзындығын табу *
strcmp( ) * екі тіркесті салыстыру *
strcpy( ) * тіркесті көшіру *
strcat( ) * Екі тіркесті біріктіру *

Бұл мысалдарға файлдарды ашу және жабу, файлдардың арасындағы байланыс,
символдарды тексеру және түрлендіру, тіркестерді түрлендіу, шығару
функциясы және жадты орналастыру функцияларын қосамыз.

     Ең алдымен файл мен программаның арасындағы байланыс мәселесіне
тоқталайық.

ФАЙЛДАРМЕН БАЙЛАНЫС

Бізге ақпаратты алу немесе нәтижелерді файлда орналастыру программасы жиі
қажет болады. Программа мен файлдың арасындағы байланысты орнатудың бір
тәсілі - и ауыстыру операциясын қолдану. Бұл тәсіл қарапайым, бірақ
шектелген. Мысалы, сізге сізден кітаптың атын сұрайтын диалогтық
программаны жазу қажет болсын, және сіз бүкіл тізімді файлда сақтамақшысыз.
Егер сіз ауысуды мына түрде қолдансаңыз:
books bklist

онда сіздің диалогтық шақыруыңыз сонымен қатар bklist – ке ауыстырылады.
Қуанышқа орай, Си тілінде файлдармен байланыстың одан да мықты тәсілдері
бар.

Файлды оқудағы қарапайым программалар.

fopen(), fclose(), getc() және puts().

Файлды қолданудағы қарапайым мысалды көрсету үшін біз test деп
аталатын, файлдың мазмұнын оқып, оны экранға шығаратын кішігірім
программаны құрдық.

#includestdio.h

main()

{

FILE *in;

int ch;

if((in=fopen(“test”, “r”))!=NULL)

{

while(ch=gets(in)!=EOF)

puts(ch, stdout);

fclose(in);}

else printf(“мен файлды аша алмадым\”test\” .\n”);

}

Үш басты сәтті түсіндіру керек: fopen(), fclose() жұмыстарын және
енгізу-шығару функцияларын қолдану. Мұнымен айналысамыз.

Файлды ашу fopen().

fopen() функциясымен 3 басты параметрді басқарады. Біріншісі – ашуға
қажетті файл аты. Ол fopen()-нің бірінші аргументі болып саналады, біздің
жағдайымызда бұл “test”.

Екінші параметр файлды қалай қолдану керектігін сипаттайды. 3 басты
файлды қолдану бар.

“r” файлды оқу;

“w” файлға жазу;

“a” файлды толықтыру;

Кейбір жүйелер қосымша мүмкіндіктерді қарастырады, бірақ біз осыларды
ұсынамыз. Аңғарғанымыздай, біз қолданған кодтар символдық константалар
емес, тіркестер болып табылады, осыдан олар қос тырнақшаға алынады.

“r” қолданғанда файл ашылады. Ал қалған екеуін қолданғанда бар файл
ашылады, бірақ ондай файл болмаса, ол құрылады.

Ескерту: егер сіз “w”-ны бар файл үшін қолдансаңыз, онда ескі нұсқа
өшіріліп, сіздің программаңыз “таза орында” жазылады.

Үшінші параметр файлға нұсқауыш, бұл түсінік мына функциямен
қайтарылады:

FILE *in;

in=fopen(“test”, “r”);

Енді in “test” файлына нұсқауыш болып табылады. Бұл сәттен бастап
программа файлға test атымен емес, in нұсқауышымен сілтенеді.

Егер сіз мұқият болсаңыз, мынадай сұрақ қоя аласыз. Егер fopen()
нұсқауышты “FILE”-ға аргумент ретінде қайтармаса, онда неге fopen()-ді
“FILE”-ға нұсқауыш функциясы ретінде бере алмаймыз? Жақсы сұрақ. Жауап
берсек сипаттаманы stdio.h файлы жасады, онда мынадай қатары бар:

FILE *topen();

Біз қолданған fopen() функциясына қатысты тағы бір жағдай бар. Егер
fopen() қажетті файлды аша алмаса, ол “NULL”(stdio.h-та 0 ретінде)
мағынасын қайтарады. Неге ол файлды аша алмады? Сіз құрылмаған файлды
сұрауыңызға болады. Сол себептен программада мына қатарды қолданамыз.

if((in=fopen(“test”, “r”))!=NULL)

Дискінің толып қалуы, тыйым салынған атты қолдану немесе кейбір басқа
себептер файлды ашуда кедергі келтіруі мүмкін. Сол себепті мұндай
нәрселерді болдырмауға тырысыңыз – кішігірім қателік сізді ұзаққа алып
баруы мүмкін. Файлды жабу оңай.

Файлды жабу: fclose().

Біздің мысал файлды қалай жабу керектігін көрсетеді.

fclose(in);

Жай ғана fclose() функциясын қолданамыз. Байқағанымыздай, файлға
нұсқауыш файл аты test емес, аргумент in болады.

Маңызды программа үшін файлдың сәтті жабылғанын көру керек. Егер файл
сәтті жабылса, 0-ді қайтарады, кері жағдайда -1 қайтарады.

Тексттік файлдарды буферлеу.

fopen(), fclose() функциялары буферлеумен айналысады. Буферлеу
дегеніміз енгізілген және шығарылатын мәліметтердің уақытша жад облысында
сақталуы. Егер буфер толып қалса, оның мәліметтері блокқа беріліп, буферлеу
процесі қайта басталады. fclose()-дің басты тапсырмаларының бірі – егер
жабық болса толтырылған кез-келген буферді тазалаумен айналысу.
Мәліметтер ANCII кодында символ ретінде сақталатын мәліметтер тексттік
файлдар болып табылады. Ол машина тілінің кодын жаттау үшін қолданылатын
екілік файлдан өзгешеленеді.

Get(c) және put(c) түріндегі файлды енгізушығару

Get(c) және put(c) функциялары getchar(және) putchar() функциялары
сияқты жұмыс атқарады. Айырмашылығы тек қана сіз жаңадан программа құрүшыға
қандай файл қолданудың тиімдірек екенін көрсету. Сол себептен

ch=getchar();

Бұл функция пернеден символдарды бір-бірдеп енгізу, ал

ch=getc(in);

in нұсқайтын файлдан символды алу. Соған ұқсас

putc(ch,out);

ch символын файлға шығару. FILE типті out нұсқауыш осыған қатысты.

putc(ch,stdout);

Бұл функциядағы stdout стандартты шығаруға нұсқауыш. Сондай-ақ, бұл
оператор putchar(ch); тепе-тең.

Шынында да, putchar(ch); операторы #define директивасымен анықталады,
сол сияқты putc(ch,stdout); stdio.h файлында анықталған. stdio.h файлы
#define директивасында stdout ... жалғасы

Сіз бұл жұмысты біздің қосымшамыз арқылы толығымен тегін көре аласыз.
Ұқсас жұмыстар
Norton Commander программасы
Norton Сommander программасымен жұмыс істеу
MS-DOS және Norton Commander туралы ақпарат
Файлдык жуйе
Visual Basic 6 жобалау ортасы
Phyton бағдарламалау тілінде файлдармен жұмыс
Операциялық жүйелер және олардың атқаратын қызметі
Файлдар және броузерлер
Логикалық файлдың сипатталуы
Файлдармен жұмыс істеу
Пәндер