|
|
səhifə | 17/55 | tarix | 07.05.2018 | ölçüsü | 4,6 Mb. | | #50260 |
| #include
int x;
main()
{
printf("Introduceti consecutiv patru caractere : \n");
printf("(introduceti litera apoi tastati ENTER) \n");
for (x=0;x<8;x++)
{
getchar();
};
}
FUNCTIA putchar()
-introduce un caracter in dispozitivul de iesire
SINTAXA GENERALA este: int putchar(int c);
Functia introduce un caracter in fluxul de date standard stdout care este
de obicei asociat ecranului sau imprimantei(poate fi o placa I/O etc.)
Este definita la fel ca si putc(c,stdout) si este similara cu fputchar().
Dupa executie returneaza caracterul introdus,sau EOF in caz de eroare.
EXEMPLU: #include
#include
int x;
main()
{
for (x=64;x<164;x++)
{
putchar(x);
printf(" ");
};
sleep(7);
}
Observati ca in cadrul functiei caracterul ce va fi introdus in stream
este desemnat prin valoarea sa ASCII.Acest fapt prezinta avantaje deoarece
permite operatii algebrice asupra numarului ce desemneaza caracterul.
-115- [ stdin.h -putc() si getc() ]
FUNCTIA putc()
-introduce un caracter in stream(in fila deschisa)
SINTAXA GENERALA este: int putc(int c,FILE stream)
Functia introduce un caracter in fluxul de date deschis in acel moment,
spre deosebire de putchar() care introduce caracterul in fluxul stdout.
Se utilizeaza pentru a introduce date intr-o fila deschisa in memoria de
operare.Valoarea prin care se desemneaza caracterele este valoarea ASCII
a caracterului respectiv.Functia permite si operatii aritmetice cu valo-
rile numerice.Dupa executie returneaza caracterul scris sau EOF in caz de
eroare.Este similara cu fputc().
EXEMPLU: #include
#include
FILE *fila;
int x;
char y;
main()
{
fila=fopen("Pagina1.txt","w+");
for (x=20;x<60;x++)
{
putc(x*2,fila);
};
rewind(fila);
for (x=0;x<40;x++)
{
fread(&y,1,1,fila);
printf("%c",y);
sleep(1);
};
}
FUNCTIA getc()
-citeste un carcter din stream(din fila deschisa in memorie)
SINTAXA GENERALA este: int getc(FILE *stream)
Functia citeste primul caracter ce urmeaza dupa pozitia cursorului din
fila deschisa in memoria de operare si incrementeaza cu 1 pozitia acestuia
Functia returneaza caracterul citit,sau EOF in caz de eroare.
EXEMPLU: #include
#include
FILE *fila;
int x;
char y;
main()
{ fila=fopen("Pagina1.txt","w+");
fputs("Text pentru verificarea functiei getc !",fila);
rewind(fila);
for (x=0;x<40;x++)
{ y=getc(fila);
printf("%c",y);
sleep(1); }; }
ESTE similara cu fgetc().(pentru ver. 32 WIN,stdin trebuie redirectionat)
-116- [ stdio.h -getw() si putw() ]
FUNCTIA getw()
-citeste din memorie(stream) o valoare numerica binara de tip int
SINTAXA GENERALA este: int getw(FILE *stream)
Functia citeste din fila virtuala primul numar care urmeaza dupa pozitia
cursorului(numar binar int).Functia nu presupune nici un fel de aliniere
speciala,dar nu se utilizeaza pentru file deschise in mod text (chiar
daca acestea contin si caractere numerice).
Functia returneaza numarul citit iar la sfarsitul filei returneaza EOF.
Pentru eventuale erori se vor utiliza functiile feof() sau ferror().
Dupa citirea numarului pozitia cursorului va fi incrementata cu 1.
Pot apare incompatibilitati intre sisteme care ruleaza versiuni diferite
ale programului,deoarece tipul de date int este implementat diferit pe
platforme diferite (poate avea un format diferit).
EXEMPLU: #include
#include
FILE *numere;
int x;
int y;
main()
{ numere=fopen("Numar1.txt","wb+");
x=27677;
putw(x,numere);
rewind(numere);
y=getw(numere);
printf("\n Valoarea binara extrasa din memorie este: \n");
printf("%d\n",y);
printf("sau scrisa sub forma de adresa de memorie: ");
printf("%x",y);
sleep(5); }
FUNCTIA putw()
-introduce in memorie(stream) o valoare binara de tip int (vezi si getw)
SINTAXA GENERALA este: int putw(int w,*stream);
Functia scrie in fluxul desemnat prin stream valoarea numerica w. Functia
nu necesita conditii speciale de pozitionare a cursorului sau aliniere in
pagina.Numarul va fi scris la pozitia cursorului.In caz de reusita retur-
neaza valoarea specificata prin w iar in caz de eroare returneaza EOF.
EXEMPLU: #include
#include
FILE *numere;
int x,y;
main()
{ numere=fopen("Numar1.txt","wb+");
x=(7677*4)/3.14;
putw(x/5,numere);
rewind(numere);
y=getw(numere)/2.72;
printf(" \n Valoarea returnata este: \n");
printf("%d",y);
sleep(5); }
Observati ca functia permite operatii aritmetice si rotunjeste la intreg.
-117- [stdio.h -sprinf() ]
FUNCTIA sprintf()
-scrie date formatate intr-un sir (intr-o variabila de tip sir)
SINTAXA GENERALA este:
int sprintf(char *buffer,const char *format[,argument,...]);
Formatul datelor introduse se descrie la fel ca pentru functia printf().
Functia permite un numar mare de argumente,astfel incat sa se poata intro-
duce in sir date cu format diferit (caractere si numere),cu conditia ca
numarul specificatorilor de format sa fie egal cu cel al campurilor de
date introduse in sir.In cazul argumentelor multiple,primul specificator
de format se va atribui primului camp de date...si asa mai departe.
Daca functia a fost executata cu succes,returneaza numarul de bytes intro-
dusi in sir (fara caracterul null introdus la sfarsitul sirului),iar in
caz de eroare returneaza EOF.
Functia arhiveaza datele la adresa specificata prin buffer,in formatul
specificat prin format,preluate din campurile de date specificate prin
argument.
Limbajul C++ accepta si functia swprintf() care este stocata in
si opereaza doar cu majuscule(in rest este identica).
EXEMPLU: #include
#include
#include
char nrpi[80];
main()
{
sprintf(nrpi,"Valoarea aproximativa pentru PI este: %f",M_PI);
puts(nrpi);
sleep(7);
}
Sau pentru a introduce un sir de caractere:
EXEMPLU: #include
#include
#include
char text[80];
int z;
int main()
{
z=sprintf(text,"\n Numele clientului este: %s","ION IONESCU");
puts(text);
printf(" \n numarul de bytes introdusi este: ");
printf("%d",z);
sleep(7);
}
FUNCTIA sscanf()
-scaneaza si preia date formatate din interiorul unui sir (unei variabile)
SINTAXA GENERALA este:
int sscanf(const char *buffer,const char *format[,adress,...]);
unde: buffer -este adresa de stocare a datelor
format -este formatul datelor (precizat ca pentru printf())
argument -sunt adresele de la care se preiau datele
Formatul datelor se specifica la fel ca pentru printf(),fprintf() etc.
-118- [stdio.h - sscanf() ]
Functia se utilizeaza pentru a prelua date de la diverse adrese de memo-
rie(din constante sau variabile,campuri de date etc.).Functia citeste si
preia datele cu formatul specificat prin format de la adresele precizate
prin argument si le arhiveaza la adresa specificata prin buffer.Citirea
datelor se face pana la primul caracter nul,sau in functie de algoritmul
implementat.Functia poate contine un numar mare de argumente in cazul in
care preia date din mai multe campuri de date,dar in acest caz,pentru
fiecare camp de date citit trebuie sa se specifice distinct formatul in
care vor fi preluate datele.In cazul argumentelor multiple,datele conti-
nute la adresa specificata prin primul argument din lista vor fi citite
in formatul precizat prin primul specificator de format...si asa mai
departe pana la epuizarea argumentelor.
Citirea datelor de la o anumita adresa poate fi intrerupta de unul dintre
urmatoarele motive:
-aparitia unui caracter de suprimare (*) dupa cel de format (%),caz in
care datele vor fi scanate dar nu vor fi arhivate
-s-a epuizat numarul de caractere specificat spre a fi citite
-a intervenit un caracter cu alt format decat cel specificat
-a intervenit un caracter exceptat de la citire
-a intervenit caracterul EOF
-s-a epuizat tot sirul de caractere specificat
Daca functia a fost executata cu succes,returneaza numarul de campuri de
date citite,convertite la formatul specificat si arhivate.Valoarea retur-
nata nu include si campurile citite dar nearhivate (de exemplu "%*" )
In caz ca citirea se face la sfarsitul campului de date,functia returneaza
EOF,iar in caz de eroare returneaza zero.
Limbajul C++,accepta si functia swscanf() arhivata in ,care este
identica,dar opereaza doar cu majuscule (nu opereaza cu caractere hexa-
zecimale multibit si nici caracterele speciale destinate pentru compati-
bilitatea zonala specifice pentru alte limbi decat engleza).
EXEMPLU: #include
#include
char text[50]="Cluj-Napoca_Romania_cod_40045 data 07/07/2005";
char adresa[80];
int x;
main()
{
printf("\n Adresa extrasa este: \n");
sscanf(text,"%s",&adresa);
printf("%s",adresa);
printf("\n Numarul de adrese de memorie citite este: \n");
printf("%d",x);
sleep(7);
}
Acestea sunt functiile incluse in biblioteca de functii standard pentru
operatiile de intrare si iesire a datelor,continute in fila cu antetul
.Functiile prezentate reprezinta baza operatiilor de comunicare
cu calculatorul si sunt implementate (cu mici diferente) in toate versiu-
nile programului C.Pot fi combinate in diverse forme,pentru a forma rutine
sau macro-uri menite sa asigure operatiile de tip I/O (input/output).
-119- [ stdio.h - _popen() ]
BIBLIOTECA stdio.h Borland C++ 5.0
Limbajul C++ accepta toate functiile prezentate anterior,la care se
adauga suplimentar si functiile: _popen,_pclose,_fsopen,_fstrcpy,rmtmp,
setvbuf,vsscanf,spawnl,spawnle,spawnlp,spawnlpe,spawnv,spawnve,spawnvp,
spawnvpe,strncpy,tempnam,tmpnam,unget,vfscanf,vprintf,vscanf,vfprint,
tempfile,unlink,vfprint iar versiunea Visual C++ adauga si setmaxstdio.
Prezentarea completa a acestor functii,depaseste scopul propus de acest
manual(abecedar de programare),dar datorita faptului ca unele dintre ele
introduc concepte si utilitati complet noi,vor fi inventariate pe scurt.
FUNCTIA _popen()
-creaza o linie de adresa catre procesor (pipe) si executa o comanda
SINTAXA GENERALA este:
FILE *_popen (const char *command,const char mode)
unde: command -este comanda pentru procesor (care se va executa)
mode -este modul in care se va returna fluxul de date
Pentru mode se vor utiliza urmatoarele caractere:
"r" -procesul apelat poate citi comenzile cu ajutorul stream-ului
returnat de functie
"w" -procesul apelat poate scrie comenzile cu ajutorul stream-ului
returnat de functie
"b" -linia de adresa "pipe-line" se va deschide binar
"t" -linia de adresa "pipe-line" se va deschide in mod text
si respectiv combinatiile:rb,rt,wb si wt cu semnificatia corespunzatoare
Linia de adresa denumita "pipe" este o simulare virtuala a unei linii
reale de conexiune dintre memoria de operare si procesor.Aceasta linie
de adresa este asemanatoare cu un tampon de memorie,are efect doar in
memoria de operare si se utilizeaza pentru a transfera informatii intre
programe diferite(permite iesirea din spatiul de memorie rezervat pentru
program).Linia de adresa astfel formata,este asemanatoare si cu o fila
virtuala,in sensul in care are asociat un pointer si un descriptor sau
amandoua,poate fi citita sau poate scrie date utilizand functiile stan-
dard din biblioteca stdio.h,dar spre deosebire de filele obisnuite,linia
de conexiune(pipe-line) este un fragment de memorie temporara situat in
afara spatiului de memorie rezervat pentru program si este controlata
in exclusivitate de catre sistemul de operare.Principalul avantaj in re-
prezinta posibilitatea de a vehicula date in afara programului sau de a
a schimba si compara datele cu alte programe.Pentru crearea unei linii de
conexiune se poate utiliza si _pipe din .
Daca a fost executata cu succes,functia returneaza un pointer care
poate fi utilizat pentru a citi rezultatul executarii comenzii apelate,
sau pentru a scrie datele dorite si apoi executate de comanda apelata.
In caz de eroare,functia returneaza NULL.
Linia de conexiune(pipe-line) creata are doua capete.Pointerul returnat
va fi asociat cu unul dintre capete,iar celelalt capat va contine datele
preluate cu ajutorul comenzii apelate.In mod similar,unul dintre capete
poate fi utilizat pentru citire,iar celelalalt pentru scrierea datelor.
Executia comenzii apelate se va face asincron (serial).
Atentie:-in mediul Windows (Win 32 SDK) _popen returneaza un numar de fila
invalid care determina programul sa ramana in pauza timp nedefinit.(WIN32
utilizeaza pentru comunicatii portul paralel(sincron) in loc de serial).
-120- [ stdio.h - _fsopen() ]
EXEMPLU: #include
#include
#include
FILE *handle;
char message[256];
int status;
int main()
{
handle=_popen("dir *.c /on/p ","rt");
while (fgets(message,sizeof(message),handle))
{
fprintf(stdout,message);
}
sleep(5);
status=_pclose(handle);
sleep(3);
return(0);
}
FUNCTIA _pclose()
-inchide linia de conexiune si asteapta executarea comenzii
SINTAXA GENERALA este: int _pclose(FILE *stream);
Functia asteapta executia comenzii (executa cwait),apoi blocheaza ID
pentru comanda de procesor lansata de _popen si apoi inchide streamul
asociat liniei de conexiune(elibereaza memoria de operare).
Daca functia a fost executata cu succes,returneaza numarul de manipulare
al procesului executat(acelasi ca si pentru functia cwait),sau in caz de
eroare,returneaza -1.
Pentru exemplu vezi mai sus.
Cele doua functii: _popen si _pclose sunt utile pentru schimbul de date
cu alte programe (cel mai frecvent cu MS-DOS sub care opereaza C++).
FUNCTIA _fsopen()
-deschide un stream pentru o fila partajata in retea
SINTAXA GENERALA este:
FILE *_fsopen(const char *filename,const char *mode,int shflag);
Functia este asemanatoare cu fopen() cu diferenta ca specifica prin
constanta int shflag si modul de partajare al filei.Constantele pentru
specificarea shflag sunt definite in fila si sunt urmatoarele:
_SH_COMPAT -seteaza compatibilitatea cu aplicatiile pe 16 biti
_SH_DENYNO -permite accesul pentru citire si scriere
_SH_DENYRD -Nu permite citirea datelor
_SH_DENYWR -Nu permite scrierea datelor
_SH_DENYRW -NU permite citirea si nici scrierea datelor
_SH_DENYNONE -permite accesul atat pentru scriere cat si pentru citire
Functia deschide fila specificata prin filename,in modul specificat prin
mode(r,w,a,r+,w+,a+,b,t) si returneaza un pointer care poate fi utilizat
pentru identificarea filei virtuale in operatiile urmatoare.
Atentie:-sub DOS,partajarea filelor este ignorata daca lipseste SHARE.
Functia returneaza un pointer sau NULL in caz de eroare.
Pentru exemple vezi functia fopen() (aplicata la file partajate in retea)
-121- [stdio.h -strncpy() si rmtmp() ]
FUNCTIA strncpy() si _fstrncpy()
-copiaza un anumit numar de bytes dintr-un sir in altul si executa trun-
chierile sau completarile necesare
SINTAXA GENERALA este:
char *strncpy(char *dest,const char *src,size_t maxlen); si:
char far *far _fstrncpy(char far *dest,const char far *src,size_t maxlen);
unde: char *dest-este adresa de destinatie
char *src -este sirul sursa
maxlen -este numarul de caractere(bytes) ce va fi copiat
Daca sirul copiat este mai mic sau egal cu cel sursa,nu se va copia si
caracterul NULL de la sfarsitul sirului.Daca sirul copiat este mai lung
decat cel sursa,atunci va fi completat cu caractere NULL pana la lungimea
specificata(ocupa spatiul de memorie indicat).Daca se utilizeaza acelasi
sir atat ca sursa cat si ca destinatie,rezultatul este nedefinit.
In versiunea Borland C++,functia este inclusa in in timp ce in
alte versiuni (Turbo C,Visual C++ etc.) functia este inclusa in
Functia copiaza numarul de caractere precizat prin maxlen,din sirul
src(sursa) in sirul dest(destinatie) si returneaza sirul dest.
EXEMPLU: #include
#include
#include
int main()
{
char string[12];
char *str1="abcdefghi";
strncpy(string,str1,9);
printf("%s\n",string);
string[7]='9';
printf("%s\n",string);
sleep(5);
}
FUNCTIA rmtmp()
-sterge filele temporare
SINTAXA GENERALA este: int rmtmp();
Functia inchide si sterge din memorie toate filele temporare deschise in
momentul apelarii functiei,cele care au fost apelate anteror prin tmpfile.
Pentru ca functia sa poate fi utilizata este necesar ca directorul curent
sa fie acelasi cu cel in care s-au deschis filele,in caz contrar filele
nu vor putea fi inchise sau sterse.Functia returneaza numarul total de
file sterse din memorie. (vezi si tmpfile() )
EXEMPLU: #include
#include
FILE *fila1,*fila2;
int nr;
main()
{ fila1=tmpfile();
fila2=tmpfile();
nr=rmtmp();
printf("Numarul de file inchise este: %d",nr);
sleep(5); }
-122- [ stdio.h -spawnl() ]
FUNCTIILE spawn...()
-creaza si executa un subprogram (un nou process,o rutina).Este necesar sa
existe suficient spatiu in memorie pentru incarcarea si executia subpro-
gramului(se pot realiza procese inlantuite).
SINTAXA GENERALA este:
int spawnl(int mode,char *path,char *arg0,arg1,...,argn,NULL);
int spawnle(int mode,char *path,char *arg0,...,argn,NULL,char *envp[]);
Dostları ilə paylaş: |
|
|