...

Linguaggio C La libreria standard

by user

on
Category: Documents
9

views

Report

Comments

Transcript

Linguaggio C La libreria standard
Fondamenti di Informatica - Linguaggio C - La libreria standard
FONDAMENTI DI INFORMATICA
Prof. PIER LUCA MONTESSORO
Ing. DAVIDE PIERATTONI
Facoltà di Ingegneria
Università degli Studi di Udine
Linguaggio C
La libreria standard
© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere la nota di copyright a pag.2)
1
Fondamenti di Informatica - Linguaggio C - La libreria standard
Nota di Copyright
Questo insieme di trasparenze (detto nel seguito slide) è protetto dalle leggi sul copyright
e dalle disposizioni dei trattati internazionali. Il titolo ed i copyright relativi alle slides (ivi
inclusi, ma non limitatamente, ogni immagine, fotografia, animazione, video, audio,
musica e testo) sono di proprietà degli autori prof. Pier Luca Montessoro e ing. Davide
Pierattoni, Università degli Studi di Udine.
Le slide possono essere riprodotte ed utilizzate liberamente dagli istituti di ricerca,
scolastici ed universitari afferenti al Ministero della Pubblica Istruzione e al Ministero
dell’Università e Ricerca Scientifica e Tecnologica, per scopi istituzionali, non a fine di
lucro. In tal caso non è richiesta alcuna autorizzazione.
Ogni altro utilizzo o riproduzione (ivi incluse, ma non limitatamente, le riproduzioni su
supporti magnetici, su reti di calcolatori e stampe) in toto o in parte è vietata, se non
esplicitamente autorizzata per iscritto, a priori, da parte degli autori.
L’informazione contenuta in queste slide è ritenuta essere accurata alla data della
pubblicazione. Essa è fornita per scopi meramente didattici e non per essere utilizzata in
progetti di impianti, prodotti, reti, ecc. In ogni caso essa è soggetta a cambiamenti senza
preavviso. Gli autori non assumono alcuna responsabilità per il contenuto di queste slide
(ivi incluse, ma non limitatamente, la correttezza, completezza, applicabilità,
aggiornamento dell’informazione).
In ogni caso non può essere dichiarata conformità all’informazione contenuta in queste
slide.
In ogni caso questa nota di copyright e il suo richiamo in calce ad ogni slide non devono
mai essere rimossi e devono essere riportati anche in utilizzi parziali.
© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere la nota di copyright a pag.2)
2
Fondamenti di Informatica - Linguaggio C - La libreria standard
NOTA
Per guidare lo studente nello studio delle
funzioni di libreria più importanti, nel seguito
esse saranno contrassegnate da uno, due o
tre asterischi, con i seguenti significati:
*** funzione da saper usare anche senza
consultare il manuale
** funzione da conoscere per il cui utilizzo è
consentita la consultazione del manuale
* funzione di cui è sufficiente sapere che esiste
© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere la nota di copyright a pag.2)
3
Fondamenti di Informatica - Linguaggio C - La libreria standard
Funzioni di libreria
• Lo standard ANSI definisce una libreria
standard per il C
• Non fa parte propriamente del
linguaggio, ma è inclusa in qualunque
compilatore C
• I prototipi delle funzioni e le
dichiarazioni dei tipi e delle macro sono
contenute in alcuni header file
#include <stdio.h>
Es.:
© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere la nota di copyright a pag.2)
4
Fondamenti di Informatica - Linguaggio C - La libreria standard
Funzioni di libreria
• La direttiva #include <stdio.h> fa sì che,
prima della compilazione, al codice sorgente
scritto dall’utente vengano aggiunti tutti i prototipi
delle funzioni presenti nella libreria standard di
input/output
• Tutti gli header file, anche quelli relativi a librerie
non standard per il linguaggio C, sono identificati
dall’estensione .h
• A differenza delle funzioni scritte dall’utente,
tutte le funzioni di una libreria risiedono in
formato già eseguibile nei file binari di libreria
© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere la nota di copyright a pag.2)
5
Fondamenti di Informatica - Linguaggio C - La libreria standard
Libreria standard stdio.h:
operazioni sui file
FILE *fopen (const char *filename,
const char *mode)
(***)
I valori possibili per mode sono:
modi binari:
"rb"
"r" read only
"wb"
"w" read and write
"ab"
"a" append
"r+b"
"r+" aggiornamento (read update)
"w+b"
"w+" aggiornamento (write update)
"a+b"
"a+" aggiornamento (append)
© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere la nota di copyright a pag.2)
6
Fondamenti di Informatica - Linguaggio C - La libreria standard
stdio.h: operazioni sui file
FILE *fclose (FILE *stream)
(***)
Esempio:
FILE *fp;
if ((fp = fopen("pippo.dat", "r")) == NULL)
{
printf ("errore di apertura del file\n");
exit (EXIT_FAILUIRE);
}
...
fclose (fp);
© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere la nota di copyright a pag.2)
7
Fondamenti di Informatica - Linguaggio C - La libreria standard
stdio.h: operazioni sui file
FILE *freopen (const char *filename,
const char *mode,
FILE *stream)
(*)
int fflush (FILE *stream)
(*)
void rewind (FILE
int remove (const
int rename (const
const
(**)
(**)
*stream)
char *filename)
char *oldname,
char *newname)
© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere la nota di copyright a pag.2)
(**)
8
Fondamenti di Informatica - Linguaggio C - La libreria standard
stdio.h: output formattato
int fprintf (FILE *stream,
const char *format, ...)
int printf (const char *format, ...)
int sprintf (char *s,
const char *format, ...)
(***)
(***)
(**)
Nota: printf è equivalente a fprintf(stdout, …)
in quanto scrive sullo standard output
L'output formattato in C è estremamente potente!
© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere la nota di copyright a pag.2)
9
Fondamenti di Informatica - Linguaggio C - La libreria standard
#include <stdio.h>
#include <stdlib.h>
Esempio
int main (int argc, char *argv[])
{
FILE *fp[10];
char filename[32];
int n;
/* apre dieci file temporanei */
for (n = 0; n < 10; n++)
{
sprintf (filename,
"c:\\temp\\t_%s%d.tmp", argv[1], n);
if ((fp[n] = fopen (filename, "w")) == NULL)
{
printf ("errore di apertura del file\n");
exit (EXIT_FAILURE);
}
}
...
© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere la nota di copyright a pag.2)
10
Fondamenti di Informatica - Linguaggio C - La libreria standard
stdio.h: input formattato
int fscanf (FILE *stream,
const char *format, ...)
int scanf (const char *format, ...)
int sscanf (char *s,
const char *format, ...)
(***)
(***)
(**)
Nota: scanf è equivalente a fscanf(stdin, ...)
in quanto legge dallo standard input.
Anche l'input formattato in C è estremamente
potente!
© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere la nota di copyright a pag.2)
11
Fondamenti di Informatica - Linguaggio C - La libreria standard
#include <stdio.h>
#include <stdlib.h>
Esempio
#define MAXSTRLEN 64
int main (int argc, char *argv[])
{
FILE *fp;
int n, sum = 0;
if ((fp = fopen(argv[1], "r")) == NULL)
{
printf ("errore di apertura del file\n");
exit (EXIT_FAILURE);
}
while (fscanf (fp, "%d", &n) != EOF)
sum += n;
printf ("%d\n", sum);
fclose(fp);
return EXIT_SUCCESS;
}
© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere la nota di copyright a pag.2)
12
Fondamenti di Informatica - Linguaggio C - La libreria standard
scanf / fscanf:
codici di formato particolarmente utili
• Soppressione della memorizzazione nelle
variabili:
%*c
%*d
%*s
%*g ecc.
• Lettura di stringa lunga al massimo N
caratteri:
%Ns
(es.: %5s %3s)
• Lettura del prossimo carattere escludendo i
separatori:
%1s
(attenzione: legge una stringa dei
lunghezza 1: scanf ("%1s", s); dove s è
una stringa, non un char)
© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere la nota di copyright a pag.2)
13
Fondamenti di Informatica - Linguaggio C - La libreria standard
stdio.h: I/O su caratteri
int fgetc (FILE *stream)
(***)
int fputc (int c, FILE *stream)
char *fgets (char *s, int n,
FILE *stream)
int fputs (const char *s,
FILE *stream)
(***)
(***)
(***)
Le funzioni fgetc e fputc lavorano sui caratteri,
fgets e fputs sulle stringhe (nel file, queste ultime
sono terminate da '\n', carattere di new line)
© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere la nota di copyright a pag.2)
14
Fondamenti di Informatica - Linguaggio C - La libreria standard
stdio.h: I/O su caratteri
int getc (FILE *stream)
int getchar (void)
(equivale a getc (stdin))
(**)
(***)
(**)
int putc (int c, FILE *stream)
int putchar (int c)
(equivale a putc(c,stdout))
(**)
char *gets (char *s)
(**)
int puts (const char *s)
(**)
(**)
int ungetc (int c, FILE *stream)
(*)
(ricolloca c su stream e restituisce c stesso al chiamante
ma funziona soltanto per l’ultimo carattere letto!!!)
© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere la nota di copyright a pag.2)
15
Fondamenti di Informatica - Linguaggio C - La libreria standard
stdio.h: altre funzioni di I/O
La libreria standard prevede altri gruppi di funzioni per
input/output:
- I/O diretto (lettura e scrittura di file binari a blocchi)
- funzioni di errore
- posizionamento su file:
int fseek (FILE *stream,
long offset, int origine)
long ftell (FILE *stream)
(*)
(*)
Le modalità di lettura e scrittura in aggiornamento di
fopen consentono di leggere e scrivere lo stesso file;
tra una lettura e una scrittura è però necessario
invocare una funzione di riposizionamento sul file.
© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere la nota di copyright a pag.2)
16
Fondamenti di Informatica - Linguaggio C - La libreria standard
Libreria standard: ctype.h
isalnum(c)
vero se c è alfanumerico
(**)
isalpha(c)
vero se c è alfabetico
(**)
isdigit(c)
vero se c è numerico
(**)
islower(c)
vero se c è minuscolo
(**)
isupper(c) vero se c è maiuscolo
...
int tolower (int c)
converte in minuscolo
int toupper (int c)
converte in minuscolo
(**)
(**)
(**)
© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere la nota di copyright a pag.2)
17
Fondamenti di Informatica - Linguaggio C - La libreria standard
Libreria standard: string.h
char *strcpy (char *s, const char *t)
(***)
copia t in s
(***)
char *strcat(char *s, const char *t)
aggiunge t al fondo di s
int strcmp(const char *s, const char *t)
(***)
confronta s e t e restituisce: <0 se s<t, 0 se s=t, >0 se s>t
(***)
int strlen (const char *s)
restituisce la lunghezza di s
Le funzioni strnxxx effettuano le stesse operazioni su n caratteri
al massimo.
© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere la nota di copyright a pag.2)
18
Fondamenti di Informatica - Linguaggio C - La libreria standard
Libreria standard: string.h
Sono anche disponibili diverse funzioni per la ricerca di
caratteri e di sottostringhe in altre stringhe.
Ad esempio:
int strstr (const char *s, const char *t) (*)
cerca t in s
Lo standard ANSI prevede anche funzioni di interfaccia
verso routine per l'efficiente manipolazione di oggetti quali
i vettori di caratteri. Tali funzioni hanno prefisso mem.
Es.: memcpy, memmove, memcmp, ...
© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere la nota di copyright a pag.2)
19
Fondamenti di Informatica - Linguaggio C - La libreria standard
Libreria standard: math.h
Si tratta delle classiche funzioni matematiche, e
lavorano tipicamente su variabili di tipo double:
sin(x)
(**)
cos(x)
(**)
tan(x)
(**)
exp(x)
(**)
log(x) logaritmo naturale di x
(**)
log10(x)
(**)
(**)
pow(x,y) calcola xy
...
© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere la nota di copyright a pag.2)
20
Fondamenti di Informatica - Linguaggio C - La libreria standard
Libreria standard: stdlib.h
Fornisce funzioni varie di utilità. Ad esempio:
double atof(const char *s)
converte una stringa in double
int atoi(const char *s)
converte una stringa in int
(**)
void *malloc(size_t size)
(*)
alloca della memoria e ne ritorna il puntatore
void free(void *p)
(*)
rilascia la memoria puntata da p (precedentemente
allocata con malloc o funzione analoga)
© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere la nota di copyright a pag.2)
21
Fondamenti di Informatica - Linguaggio C - La libreria standard
Libreria standard: stdlib.h
int rand (void)
(**)
genera un numero intero pseudocasuale
void srand (unsigned int)
(**)
inizializza l’algoritmo di generazione pseudocasuale
utilizzato da srand
© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere la nota di copyright a pag.2)
22
Fondamenti di Informatica - Linguaggio C - La libreria standard
Libreria standard: signal.h
Fornisce funzioni per la gestione di condizioni di
eccezione che si verificano durante l'esecuzione, come
gli interrupt o gli errori.
void (*signal(int sig, void (*h)(int))) (int)
(*)
Esistono dei valori predefiniti per sig, per esempio
SIGINT per l'interrupt software (CTRL-C). Quando viene
ricevuto, viene eseguita la funzione il cui puntatore è
passato come parametro (h).
© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere la nota di copyright a pag.2)
23
Fondamenti di Informatica - Linguaggio C - La libreria standard
Libreria standard: time.h
Fornisce funzioni per la manipolazione di ora e data.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
time_t t;
time (&t);
printf ("data e ora in formato interno: %d\n", t);
printf ("data e ora decodificate: %s", ctime (&t));
return EXIT_SUCCESS;
}
© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere la nota di copyright a pag.2)
24
Fondamenti di Informatica - Linguaggio C - La libreria standard
Libreria standard: time.h
C:\PROGRAMMI> mytime
data e ora in formato interno: 998722384
data e ora decodificate: Sat Aug 25 08:53:04 2001
C:\PROGRAMMI>
© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere la nota di copyright a pag.2)
25
Fondamenti di Informatica - Linguaggio C - La libreria standard
Libreria standard: time.h
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
time_t t;
time (&t);
/* stampera` sempre lo stesso valore */
printf ("%d\n", rand());
/* inizializzazione di rand */
srand (t);
/* adesso stampa un valore casuale */
printf ("%d\n", rand());
}
© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere la nota di copyright a pag.2)
26
Fly UP