Читайте также:
|
|
Ағымдар және енгізу-шығару ағымдары. Ағымдар Си тілінде мәліметтерді оқу немесе жазу үшін кен қолданылатын құралдар болып табылады. Олар ыңғайлы және тиымды енгізу-шығару ұйымдастыруға мүмкіндік береді, сонымен қатар қолданатын файлдарға немесе құрылғыларға тәуелді емес. Ағым файл немесе физикалық құрылғы ретінде табылады (мысалы принтер немесе монитор), оларды file объектке көрсеткіш көмегімен басқаруға болады (stdio.h-да анықталған). File файлдың құрамында ағым туралы әртүрлі ақпарат бар, соның ішінде ағымның позициясы, сәйкесті буферлер және қателер немесе файлдың соңы туралы индикаторларға көрсеткіш туралы мәліметтер бар.
Енгізу-шығаруды ағымға жіберу үшін алдын ала оны ашу қажет. Ашылған ағым атталған DOS файлмен немесе құрылғымен байланысады. Ағымдарды ашатын программалар бұл - fopen, fdopen и freopen. Ағымдар ашылған кезде қандай әрекеттер орындалатын көрсетіледі.
Мәтіндік және екілік ағымдар. Мәтіндік ағымдар кәдімгі мәтіндік DOSфайлдар үшін қолданылады. Си++ -те енгізу- шығару ағымы болжайды, мәтіндік файл жолдарға бөлінген және жаңа жолға бір символдын көмегімен ажыратылған деп (жолды аударатын символ ASCII болып табылады). Бірақ DOS мәтіндік файл дискіге әр жолдар арасында екі символ арқылы жазылады - каретканы қайтару және жолды аудару ASCII символдар.
Екілік ағымдарда ешқандай түрлендіру ұйымдастырылмайды. Кез келген символдар өзгеріссіз оқылады және жазылады. Файлды мәтіндік және екілік режимдерде баяндауға болады.
Әншейін ағымдар мәліметтерді оқу және жазу үшін тізбекті түрде қолданылады. Енгізу-шығару файл ағымды позициясында орналасады. Мәліметтерді жазылған немесе оқылған кезде программа файлдық позицияны өңделген мәліметтердең кейін аустырады. Дискілік файлмен байланысқан ағым бос қол жеткен ағым болу мүмкін. Соңдықтан, файлды позициялану үшін fseek қолдануға болады, ал оқу немесе жазу операторларды орындау нәтижесі осы нүктеден кейін мәліметтерге қол жеткізіп санауға болады. Егер мәліметтер ағымда жазылуы мен оқулуы қатар орындалса, онда оқу және жазу операторларды еркін араластыруға болмайды. Жазу мен оқу аралығында ағымның буферің тазалауды талап етеді. Fflush, flushall немесе fseek шақырулар буферді тазалайды және операцияларды аустыруға мүмкіндік береді. Толық тасымалдау үшін буферді тазалау қажет, егер ол қолданбаса, онда басқа жүйелердің енгізу-шығару операцияларға тіпті буферссіз араласуға қосымша шектеулері бар.
Кейбір ағымдардың енгізу-шығару функцияларын сиппатау. Fopen функция файлды ашады, ол path- атымен анықталады. Төменде көрсетілгендей type жолдағы символдар файл үшін талап ететін қол жеткізу типті анықтайды. Форматы:
#include <stdio.h>
FILE *fopen(pathname, type);
char *pathname; // path-файлдың аты.
char *type; // қол жеткізу үшін рұқсатталған тип
11.1-кесте
Режим | Сиппатау |
"r" | Оқу үшін файлды ашу (Бұл файл болу керек). |
"w" | Жазу үшін бос файлды ашу қажет, егер бұл файл алдын ала болған болса,онда оның мазмұны жойылады. |
"a" | Соңына жазылу (қосу) үшін бос файлды ашу қажет. Егер бұл файл жоқ болса,онда оны құру қажет. |
"r+" | Оқу және жазылу үшін файлды қатар ашу.Файл алдын ала болу керек. |
"w+" | Оқу және жазылу үшін бос файлды ашу. Файл алдын ала болса, онда оның мазмұны жойылады. |
"a+" | Оқу және қосу үшін файлды ашу. Файл алдын ала болмаса оны құру қажет. |
Егер файл тип "a" немесе"a+" көмегімен ашылса, онда барлық жазылу операциялар файлдың соңына орындалады. Fseek немесе rewind функцияларды қолданған кезде файлға көрсеткіштін позициясын ауыстыруға болады, оған қарамастан файлға көрсеткіш кез келген жазылу операциялардың орындалу кезіңде алдын ала әр қашанда файлдың соңына қайтырылады. Ақырында бар болған мәліметтер қайта жазылмайды. "r+', "w+", "a+" типтерді қолданған кезде оқу мен жазылу қатар болуы мүмкін (Файл жаңарту үшін ашылады деп айтылады). Сондықтан, оқудан жазылуға аустыру және кері қарай кезде fseek немесе rewind функцияларды қолдану қажет. Fseek функция үшін ағымды позициясы дәл анықтауға болады (қажет болған жағдайда).
11.2 -кесте
Символ | Мәні |
T | Мәтіндік режимде ашу; "Возврат каретки – перевод строки" комбинацияны енгізу кезінде "перевода строки" деген жалғыз символға түрлендіреді. |
B | Екілік режимде ашу; жоғары көрсетілген түрлендірулер орындалмайды. |
Жаңа жолдың символына түрлендіру тәсіліне ерекшелу үшін, жоғары көрсетілген мәндерге қосымша type жолға келесі символды қосуға болады.
Қайтарылған мән. Fopen функциясы ащық файлға көрсеткішті қайтарады. NULL көрсеткіштін мәні қате туралы белгілейді.
Мысалы:
#include <stdio.h>
main (argc, argv)
int argc;
char *argv[];
{
FILE *stream;
/* применение fopen -ді қолдану файлды ашуға мүмкіндік береді, оның аты argv[argc-1] қөрсеткіште сақталынады;егер бұл орындалмаса онда программа қате туралы хабарламаны басып шығарады. */
if ((stream= fopen(argv[argc-1]), "r"))==NULL) {
fprintf (stderr, "%s файл ашылмайды %s\n", argv[0], argv[argc-1]);
exit(1);
}
/* Ескерту!Программанын аты argv[0]-да сақталынады MS DOS 3.0-тың алдынғы версияларында және кейінгі; MS DOS-тың алдынғы версияларында, argv[0] "Си" жолында ораласқан*/
Fclose, fcloseall функциялар сәйкесті ағым мен ағымдарды жабады. Ағымдармен байланысқан буферлер жабу кезінде алдын ала жаңартады. Ағымдар жабылған кезде жүйемен басылып алған буферлер босатылады. Setbuf функциямен анықталған буферлер автоматты түрде босаылмайды.
Берілген ағымды fclose функция stream функциямен жабады. S tdin, stdout, stderr, stdaux, stdprn ағымдардан басқа fcloseall функция барлық ашық ағымдарды жабады. Форматы:
#include <stdio.h>
int fclose(stream); ашық ағымды жабады.
FILE *stream; FILE құрылымға көрсеткіш.
int fcloseall(); барлық ашық ағымдарды жабады.
Қайтарлылған мағыма. Функция fclose 0 қайтарады, егер ағым сәтті жабылса. Функция fcloseall жабылған ағымдардың жалпы саның қайтарады. Қате болған жағдайда екі функциялар eof мәнің қайтарады.
Мысалы:
#include <stdio.h>
FILE *stream; int numclosed;
stream=fopen("data", "r");
...
/* келесі оператор ағымды жабады */
fclose (stream);
/* келесі оператор барлық ағымдарды жабады, тек қана stdin, stdout, stderr, stdaux, stdprn */
numclosed=fcloseall();
Функция fprintf функция символдардың ағымдардың және мәндердін тірулім шығыс ағымға форматайды да баспаға шығарады. Әр аргумент (егер ол болса) түрлендіріледі де және форматтын берілген спецификациясына сәйкес форматтың жолына шығарылады. Жол формат printf функцияның жол форматтын аргументің формасымен және функциясымен қолданылады. Жол форматта (format-string) printf функцияның жол форматтын аргументі формасымен және функциясы бар. Формат:
#include <stdio.h>
int fprintf (stream, format-string [, argument...]);
FILE *stream; FILE құрылымға көрсеткіш.
char *format-string;форматты басқаратын жол
Қайтарылған мәні. Осы функция баспаға шығарылған символдардың санын қайтарады.
Мысал.
#include <stdio.h>
FILE *stream; int i = 10; double fp = 1.5;
char *s = "Бұл жол";
char c = '\n';
stream = fopen("result", "w");
/* форматтау және әртүрлі мәліметтерді баспаға шығару */
fprintf (stream, "%s%c", s, c);
/* сөйлемшінің баспаға шығаруы "бұл - жаңа жол", жаңа жолдың символыннаң кейін */
fprintf (stream, "%d\n", i);
/*10 саның баспаға шығару, содан кейін жаңа жолдың символың */
fprintf (stream, "%f", fp); /* 1.500000санды баспаға шығару */
Fscanf функция мәліметтердің деректерлерің stream ағымың тасқынының ағымдық айқындамасынан arguments (олар болса) дәлелінің тапсырмасымен анықталған жерге оқып алады. Әр аргумент айнымалыға және типке көрсеткіш болуға тиісті, сонымен қатар жолдың форматында берілгеніне типіне сәйкес болу керек. Форматтың жолы енгізудің өрістің түсіндіруімен басқарылады және оның формасы мен міндеті, не форматтың жолының аргументі (дәлелі) scanf функция үшін сияқты болып табылады.
#include <stdio.h>
int fscanf (stream, format-string [, argument...]);
FILE *stream; FILE құрылымына көрсеткіш.
char *format-string; форматты басқаратың жол.
Қайтарлылған мән. Бұл функция дұрыс түрлендірілген және бекітілген өрістердің санын қайтарады. Қайтарлылған мән оқылған кейін, бірақ бегітілмеген өрістерді құрамының ішіне алмайды. Файлдың соңының оқу амалында eof мәні қайтады. Қайтарлылған мағыма 0 белгілейді, бұл бегітілген өрістер жоқ екенін білдіреді.
Мысал.
#include <stdio.h>
FILE *stream;
long l; float fp; char s[81]; char c;
stream = fopen ("data", "r");
...
/* әртүрлі мәліметтерді енгізу */
fscanf (stream, "%s", s);
fscanf (stream, "%c", &c);
fscanf (stream, "%ld", &l);
fscanf (stream, "%f", &fp);.
Сонымен қатар файлдармен жұмыс атқарған кезіңде келесі функциялар қолданылады:
11.3-кесте
Функция | Қысқа сипаттама |
Fdopen | Дескрипторды қолданып, алдың ала төменгі денгейде ашылған файл үшін ағымды құру |
feof | Ағымың соңына тексеру |
ferror | Ағымның қателерінің жалауына тексеру |
fgetc | Жолдан символдарды оқу |
fileno | Ағыммен байланысқан файлдың дескрипторын алу |
fgetchar | Енгізу stdin стандарты ағымынаң символды оқу |
fgets | Ағыман жолды оқу |
fputc | Символды ағымға жазылуы |
Fputchar | stdout шығару стандарттық ағымға символды жазылуы |
Fputs | Ағымға жолды жазылуы |
Fread | Мәліметтерді ағымнаң форматталғанаң тыс оқу |
Freopen | Жаңа режимде ағымың қайта ашылуы |
Fseek | Тапсырылған ақындамаға файлдың көрсеткішін көшіру |
Fwrite | Ағымға мәліметтерді форматталғанаң тыс жазылуы |
Негізгі әдебиет: 1 [279-336], 2[737-780], 3[240-256], 5[147-163]
Қосымша әдебиет: 1[252-255]
Бақылау сұрақтары:
1. Қандай функцияның көмегімен файлда жазылу орындалады?
2. Мәліметтердің массиві мәліметтердің файлдаң айырмашылығы неде?
3. Қандай функцияның көмегімен файлда іздеу орындалады?
4. Файлдан ақпаратты оқу үшін қандай функциялар қолданылады?
5. Файлды жабу үшін қандай функциялар қолданылады?
12- дәріс. С++ тегі графика
Графикалық функциялар инициалдау үшін мына функциялар қолданылады:
voіd far іnіtgraph (іnt far -drіve-", іnt far «mode, char far -path);
Бірінші параметр кітапханаға жұмыс жасайтын адаптер типін көрсетеді. Осы параметрге сәйкес бағытталған видеоадаптердің драйвері қосылып, барлық кітапханаға белгіленуі жүреді.Стандартты драйверлерді: CGA, EGA. VGA, DETECT т.б. көрсететін бір неше тұрақтылар анықталған.
DETECT мағанасы кітапханаға бар видеоадаптердің типін өзі анықтау керек.
Екінші параметр - mode - режимді анықтайды.
Дата добавления: 2015-07-08; просмотров: 804 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Дәріс. Құрылымдар және мәліметтердің басқа формалары. | | | Параметр Режим |