• Non ci sono risultati.

Università degli Studi di Udine

N/A
N/A
Protected

Academic year: 2021

Condividi "Università degli Studi di Udine"

Copied!
26
0
0

Testo completo

(1)

FONDAMENTI DI INFORMATICA

Prof. PIER LUCA MONTESSORO Ing. DAVIDE PIERATTONI

Facoltà di Ingegneria

Università degli Studi di Udine

Linguaggio C

La libreria standard

(2)

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

Nota di Copyright

(3)

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

(4)

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

(5)

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

(6)

Libreria standard stdio.h:

operazioni sui file

FILE *fopen (const char *filename,

const char *mode) (***)

I valori possibili per mode sono:

"r" read only

"w" read and write

"a" append

"r+" aggiornamento (read update)

"w+" aggiornamento (write update)

"a+" aggiornamento (append)

modi binari:

"rb"

"wb"

"ab"

"r+b"

"w+b"

"a+b"

(7)

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);

(8)

stdio.h : operazioni sui file

FILE *freopen (const char *filename, const char *mode,

FILE *stream) (*)

int fflush (FILE *stream) (*)

void rewind (FILE *stream) (**) int remove (const char *filename) (**) int rename (const char *oldname,

const char *newname) (**)

(9)

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!

(10)

Esempio

#include <stdio.h>

#include <stdlib.h>

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);

}

}

(11)

stdio.h : input formattato

Nota: scanf è equivalente a fscanf(stdin, ...) in quanto legge dallo standard input.

Anche l'input formattato in C è estremamente potente!

int fscanf (FILE *stream,

const char *format, ...) (***) int scanf (const char *format, ...) (***) int sscanf (char *s,

const char *format, ...) (**)

(12)

Esempio

#include <stdlib.h>

#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;

(13)

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 è

(14)

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)

(15)

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

(16)

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

(17)

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 maiuscolo

(18)

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 str nxxx effettuano le stesse operazioni su n caratteri

al massimo.

(19)

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, ...

(20)

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 x y (**)

...

(21)

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

(22)

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

(23)

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;

(24)

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>

(25)

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 */

(26)

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).

Riferimenti

Documenti correlati

Le slide possono essere riprodotte ed utilizzate liberamente dagli istituti di ricerca, scolastici ed universitari afferenti al Ministero della Pubblica Istruzione e al Ministero

Le slide possono essere riprodotte ed utilizzate liberamente dagli istituti di ricerca, scolastici ed universitari afferenti al Ministero della Pubblica Istruzione e al Ministero

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

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

Le slide possono essere riprodotte ed utilizzate liberamente dagli istituti di ricerca, scolastici ed universitari afferenti al Ministero della Pubblica Istruzione e al Ministero

uguali con il carattere riservato seguito da uno solo dei byte ripetuti più un.. contatore del numero

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

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.. Nota