Linguaggio C La libreria standard

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Linguaggio C La libreria standard"

Transcript

1 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

2 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 Pier Luca Montessoro - Davide Pierattoni (vedere la nota di copyright a pag.2) 2

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 * funzione di cui è sufficiente sapere che esiste 2001 Pier Luca Montessoro - Davide Pierattoni (vedere la nota di copyright a pag.2) 3

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 Es.: #include <stdio.h> 2001 Pier Luca Montessoro - Davide Pierattoni (vedere la nota di copyright a pag.2) 4

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 formato già eseguibile nei file binari di libreria 2001 Pier Luca Montessoro - Davide Pierattoni (vedere la nota di copyright a pag.2) 5

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" 2001 Pier Luca Montessoro - Davide Pierattoni (vedere la nota di copyright a pag.2) 6

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); 2001 Pier Luca Montessoro - Davide Pierattoni (vedere la nota di copyright a pag.2) 7

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) (**) 2001 Pier Luca Montessoro - Davide Pierattoni (vedere la nota di copyright a pag.2) 8

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! 2001 Pier Luca Montessoro - Davide Pierattoni (vedere la nota di copyright a pag.2) 9

10 #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); } } Pier Luca Montessoro - Davide Pierattoni (vedere la nota di copyright a pag.2) 10

11 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

12 #include <stdio.h> #include <stdlib.h> #define MAXSTRLEN 64 int main (int argc, char *argv[]) { FILE *fp; int n, sum = 0; Esempio } 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

13 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

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) 2001 Pier Luca Montessoro - Davide Pierattoni (vedere la nota di copyright a pag.2) 14

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 ma funziona soltanto per l ultimo carattere letto!!!) 2001 Pier Luca Montessoro - Davide Pierattoni (vedere la nota di copyright a pag.2) 15

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 invocare una funzione di riposizionamento sul file Pier Luca Montessoro - Davide Pierattoni (vedere la nota di copyright a pag.2) 16

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 minuscolo 2001 Pier Luca Montessoro - Davide Pierattoni (vedere la nota di copyright a pag.2) 17

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 strnxxx effettuano le stesse operazioni su n caratteri al massimo Pier Luca Montessoro - Davide Pierattoni (vedere la nota di copyright a pag.2) 18

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, Pier Luca Montessoro - Davide Pierattoni (vedere la nota di copyright a pag.2) 19

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 (**) Pier Luca Montessoro - Davide Pierattoni (vedere la nota di copyright a pag.2) 20

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 allocata con malloc o funzione analoga) 2001 Pier Luca Montessoro - Davide Pierattoni (vedere la nota di copyright a pag.2) 21

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 2001 Pier Luca Montessoro - Davide Pierattoni (vedere la nota di copyright a pag.2) 22

23 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) Pier Luca Montessoro - Davide Pierattoni (vedere la nota di copyright a pag.2) 23

24 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

25 Libreria standard: time.h C:\PROGRAMMI> mytime data e ora in formato interno: data e ora decodificate: Sat Aug 25 08:53: C:\PROGRAMMI> 2001 Pier Luca Montessoro - Davide Pierattoni (vedere la nota di copyright a pag.2) 25

26 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

Input/output in C e in C++

Input/output in C e in C++ FONDAMENTI DI INFORMATICA Prof. PIER LUCA MONTESSORO Ing. DAVIDE PIERATTONI Facoltà di Ingegneria Università degli Studi di Udine Input/output in C e in C++ 2001 Pier Luca Montessoro - Davide Pierattoni

Dettagli

La programmazione in linguaggio C

La programmazione in linguaggio C FONDAMENTI DI INFORMATICA Prof. PIER LUCA MONTESSORO Ing. DAVIDE PIERATTONI Facoltà di Ingegneria Università degli Studi di Udine La programmazione in linguaggio C 2001 Pier Luca Montessoro - Davide Pierattoni

Dettagli

Linguaggio C Struct e union

Linguaggio C Struct e union FONDAMENTI DI INFORMATICA Prof. PIER LUCA MONTESSORO Ing. DAVIDE PIERATTONI Facoltà di Ingegneria Università degli Studi di Udine Linguaggio C Struct e union 2001 Pier Luca Montessoro - Davide Pierattoni

Dettagli

Introduzione alla programmazione strutturata

Introduzione alla programmazione strutturata FONDAMENTI DI INFORMATICA Prof. PIER LUCA MONTESSORO Prof. ELIO TOPPANO Facoltà di Ingegneria Università degli Studi di Udine Introduzione alla programmazione strutturata 2001 Pier Luca Montessoro, Elio

Dettagli

Codifica dei numeri interi positivi e negativi

Codifica dei numeri interi positivi e negativi FONDAMENTI DI INFORMATICA Prof. PIER LUCA MONTESSORO Facoltà di Ingegneria Università degli Studi di Udine Codifica dei numeri interi positivi e negativi 2000 Pier Luca Montessoro (si veda la nota di copyright

Dettagli

Scrivere il software. Scrivere il software. Interprete. Compilatore e linker. Fondamenti di Informatica

Scrivere il software. Scrivere il software. Interprete. Compilatore e linker. Fondamenti di Informatica FODAMETI DI IFORMATICA Prof. PIER LUCA MOTESSORO Prof. ELIO TOPPAO Facoltà di Ingegneria Università degli Studi di Udine Introduzione alla programmazione strutturata 2001 Pier Luca Montessoro, Elio Toppano

Dettagli

Tecniche di compressione senza perdita

Tecniche di compressione senza perdita FONDAMENTI DI INFORMATICA Prof. PIER LUCA MONTESSORO Facoltà di Ingegneria Università degli Studi di Udine Tecniche di compressione senza perdita 2000 Pier Luca Montessoro (si veda la nota di copyright

Dettagli

I files in C. A cura del prof. Ghezzi

I files in C. A cura del prof. Ghezzi I files in C A cura del prof. Ghezzi 1 Perchè i files? Realizzano la persistenza dei dati dati che sopravvivono all esecuzione del programma Sono delle strutture di dati sequenziali 2 Files e S.O. I files

Dettagli

File binari e file di testo

File binari e file di testo I file File binari e file di testo distinzione tra file binari file di testo si possono usare funzioni diverse per la gestione di tipi di file diversi Programmazione Gestione dei file 2 File binari e file

Dettagli

Gestione dei file in C

Gestione dei file in C Gestione dei file in C Fondamenti di Informatica Che cos è un file e a cosa serve? Memoria di massa vs memoria centrale q La memoria di massa (disco fisso) è un dispositivo di memorizzazione generalmente

Dettagli

Input/output da file I/O ANSI e I/O UNIX FLUSSI E FILE FLUSSI FLUSSI di TESTO FLUSSI BINARI FILE

Input/output da file I/O ANSI e I/O UNIX FLUSSI E FILE FLUSSI FLUSSI di TESTO FLUSSI BINARI FILE Input/output da file Il linguaggio C non contiene istruzioni di I/O, in quanto tali operazioni vengono eseguite tramite funzioni di libreria standard. Questo approccio rende estremamente flessibile e potente

Dettagli

Codifica dei segnali audio

Codifica dei segnali audio FONDAMENTI DI INFORMATICA Prof. PIER LUCA MONTESSORO Facoltà di Ingegneria Università degli Studi di Udine Codifica dei segnali audio 2000 Pier Luca Montessoro (si veda la nota di copyright alla slide

Dettagli

IL CABLAGGIO STRUTTURATO DI CATEGORIA 6

IL CABLAGGIO STRUTTURATO DI CATEGORIA 6 IL CABLAGGIO STRUTTURATO DI CATEGORIA 6 21 maggio 2002 PIER LUCA MONTESSORO Dip. di Ingegneria Elettrica Gestionale e Meccanica Università degli Studi di Udine in collaborazione con 2002 Pier Luca Montessoro

Dettagli

Lezione 19 e Allocazione dinamica della memoria - Direttive al preprocessore - Libreria standard - Gestione delle stringhe

Lezione 19 e Allocazione dinamica della memoria - Direttive al preprocessore - Libreria standard - Gestione delle stringhe Lezione 19 e 20 - Allocazione dinamica della memoria - Direttive al preprocessore - Libreria standard - Gestione delle stringhe Valentina Ciriani (2005-2008) Laboratorio di programmazione Valentina Ciriani

Dettagli

Caratteri e stringhe

Caratteri e stringhe Caratteri e stringhe Caratteri Dato che un computer può memorizzare esclusivamente sequenze di bit, per memorizzare un carattere (e quindi testi) è necessario stabilire una convenzione che associa a un

Dettagli

FONDAMENTI DI INFORMATICA. Prof. PIER LUCA MONTESSORO. Facoltà di Ingegneria Università degli Studi di Udine. Compressione audio

FONDAMENTI DI INFORMATICA. Prof. PIER LUCA MONTESSORO. Facoltà di Ingegneria Università degli Studi di Udine. Compressione audio FONDAMENTI DI INFORMATICA Prof. PIER LUCA MONTESSORO Facoltà di Ingegneria Università degli Studi di Udine Compressione audio 2000 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 1

Dettagli

Librerie C. Corso di Linguaggi e Traduttori 1 AA Corso di Linguaggi e Traduttori 1 AA stdio.h

Librerie C. Corso di Linguaggi e Traduttori 1 AA Corso di Linguaggi e Traduttori 1 AA stdio.h Corso di Linguaggi e Traduttori 1 AA 2004-05 1 Corso di Linguaggi e Traduttori 1 AA 2004-05 stdio.h 2 Funzioni comuni di I/O? Le piu' comuni funzioni che permettono I/O sono getchar() e putchar():? int

Dettagli

Gestione dei file. File di testo e binari

Gestione dei file. File di testo e binari Gestione dei file Un file e definito come un oggetto, presente nel file system, costituito da una sequenza continua di bytes Un file, per poter essere utilizzato, deve essere aperto Successivamente e possibile

Dettagli