Igino Corona
|
|
- Aldo De Angelis
- 7 anni fa
- Visualizzazioni
Transcript
1 Sistemi Operativi Esercitazione 2: Richiami di programmazione in linguaggio C/C++ Igino Corona martedi 7 Ottobre 2008
2 Linguaggi di programmazione Un linguaggio di programmazione è un linguaggio formale tramite il quale vengono espressi e deniti (codice sorgente) i programmi. Dal punto di vista pratico, vi sono due principali tipologie di linguaggi di programmazione: Compilati nei quali il codice sorgente del programma viene processato da un compilatore, che dopo averne vericato la correttezza (in genere sintattica), viene tradotto in un formato (binario) eseguibile dal sistema operativo Interpretati nei quali il codice sorgente del programma viene processato da un interprete che esegue le istruzioni, interagendo col sistema operativo sottostante
3 Linguaggi di programmazione Il C (C++) è un linguaggio di programmazione compilato. Questo signica che se vogliamo creare un programma tramite C (C++), che sia eseguibile su un certo sistema operativo, dobbiamo avere a disposizione il compilatore specico. Per linux (come per Windows) sono disponibili diversi compilatori C e C++. Nel seguito vedremo i compilatori GNU: gcc (per C) e g++ (per C++).
4 Linguaggi di programmazione Il C (C++) è un linguaggio di programmazione compilato. Questo signica che se vogliamo creare un programma tramite C (C++), che sia eseguibile su un certo sistema operativo, dobbiamo avere a disposizione il compilatore specico. Per linux (come per Windows) sono disponibili diversi compilatori C e C++. Nel seguito vedremo i compilatori GNU: gcc (per C) e g++ (per C++). Qualche esempio di linguaggio di programmazione interpretato? Tra i più famosi vi sono Java e Python.
5 Funzioni di libreria statiche e condivise Una funzione è una collezione di istruzioni che permettono di svolgere una determinata operazione e restituire dei valori. Ogni programma fa uso di funzioni, siano esse denite nel programma stesso o (già scritte e) disponibili in librerie. Per libreria si intende un contenitore di funzioni memorizzato in un le in formato codice oggetto. Nei sistemi UNIX, le librerie sono in genere presenti in /usr/lib e /usr/local/lib.
6 Funzioni di libreria statiche e condivise Una libreria può essere statica: le funzioni referenziate all'interno di un programma vengono estratte dalla libreria e incorporate nel le eseguibile in fase di compilazione (fase di linking) Una libreria può essere condivisa: contiene oggetti che condivisibili da più programmi; i le eseguibili possono contenere solo i riferimenti a tali oggetti, che vengono caricati in memoria (se non già presenti) in fase di esecuzione del programma
7 Funzioni di libreria statiche e condivise Compilare un programma C in Linux tramite shell Produrre un eseguibile a partire dal codice sorgente C: gcc -o <nome_eseguibile> <nome_sorgente>.c Produrre solo il codice oggetto: gcc -c <nome_sorgente>.c
8 Funzioni di libreria statiche e condivise Creare una libreria di funzioni Si vuole creare una libreria relativa alle funzioni ascii() e change_case() 1. Creo il codice oggetto relativo alle funzioni: g++ -c ascii.cxx g++ -c change_case.cxx 2. Creo la libreria standard libmy_demo.a, usando ar (UNIX archive utility): ar cr libmy_demo.a ascii.o change_case.o 1 1 ar prevede l'inserimento dei ag (in questo caso cr) senza il trattino...
9 Funzioni di libreria statiche e condivise Utilizzare la libreria di funzioni creata Creazione dell' header le my_demo.h deve contenere i prototipi delle funzioni ascii() e change_case() Uso della libreria in main.cxx g++ -o main main.cxx -L. -lmy_demo L' opzione -lmy_demo chiede al compilatore di eettuare il link tra il condice oggetto prodotto dalla compilazione di main.cxx e il codice oggetto della libreria libmy_demo.a L' opzione -L. inserisce la directory corrente tra i percorsi in cui il compilatore andrà a cercare libmy_demo.a
10 Funzioni di libreria statiche e condivise Utilizzare una libreria di funzioni (in generale) Link di librerie gcc -o <nome_eseguibile> <nome_sorgente>.c -l<nome_libreria> -L<PATH_librerie> Il link del codice C scritto dall' utente con le librerie viene eettuato su richiesta L' opzione -l del compilatore viene seguita dal nome della libreria senza il presso lib e l' estensione All' interno del codice sorgente deve essere incluso l' header (es. <math.h>) relativo alla libreria da utilizzare Esempio: g++ -o prgm prgm.cxx -lm Esegue il link della libreria matematica libm.a (oppure.so)
11 Funzioni di libreria statiche e condivise Librerie standard In genere assieme al compilatore vengono fornite un certo numero di librerie di funzioni predenite (es. librerie per l' input/output, librerie matematiche, etc.) libc è una libreria molto importante che viene utilizzata di default in fase di link per poter creare un eseguibile a partire dal codice C contiene il codice oggetto di funzioni di base quali printf, scanf, open, read, write, etc. Il comando ar consente anche di visualizzare il contenuto di una libreria: ar t /usr/lib/libc.a pr -4 -t N.B. con la concatenazione del comando pr -4 -t (tramite la pipe) si formatta l' output di ar t /usr/lib/libc.a su 4 colonne
12 Formato dei le eseguibili Il formato di default con cui vengono generati gli eseguibili (Executable and Linking Format) contiene (la denizione si trova nel le intestazione <elf.h>): Un header (intestazione) contenente informazioni sul sistema per cui il codice è stato compilato (tipo di hardware, versione SO, etc.) Informazioni sui segmenti di testo e dati Informazioni relative alla rilocazione Informazioni sulla tabella dei simboli e sulla tabella delle stringhe In linux, come nel resto dei sistemi UNIX, i le eseguibili vengono identicati vericando che questi rispettino il formato ELF, e non tramite l' estensione.exe del le come avviene in Windows.
13 Argomenti passati dalla shell È possibile accedere agli argomenti passati ad un programma tramite riga di comando facendo uso dei parametri argc e argv della fuzione main() argc: è un valore intero che specica il numero di parametri immessi nella riga di comando (n.b.: include il nome del le eseguibile) argv: è un array di puntatori a stringhe di caratteri. Ogni elemento di argv punta a un argomento fornito nella riga di comando (comprende anche il nome del le eseguibile) Esempio. Se digitiamo cp file1.c file1.bak, la shell assegna i seguenti valori alle variabili: argc = 3 argv[0] = cp argv[1] = file1.c argv[2] = file2.bak argv[3] = NULL
14 Argomenti passati dalla shell Esempio Esempio. Scriviamo il seguente listato su rigacom.c: void main(int argc, char *argv[]) { int i=0; printf(``nella riga di comando sono stati inseriti %d argomenti:\n\n'', argc); for (i=0; i<argc; i++) printf(``argv[%d] = %s, '', i, argv[i]); } Compiliamo tramite gcc -o rigacom rigacom.c e eseguiamo: rigacom uno due tre quattro cinque Output: Nella riga di comando sono stati insertiti 5 argomenti: rigacom, uno, due, tre quattro, cinque
15 Argomenti passati dalla shell Variabili di ambiente A livello di shell in genere vengono denite delle variabili d'ambiente (visibili utilizzando il comando env o printenv). Queste possono contenere il nome dell' utente corrente, del gruppo di appartenenza, host, percorsi predeniti, etc. (maggiori informazioni tramite man environ) I processi hanno accesso alle variabili d'ambiente tramite un puntatore (es. p2.7.cxx): extern char **environ; Le variabili d' ambiente possono essere lette/modicate anche attraverso le funzioni getenv() e putenv() denite in <stdlib.h>
16 Gestione degli errori La chiamata ad una funzione potrebbe non andare a buon ne. Ad esempio utilizzare la funzione open() per tentare di aprire un le inesistente causerà un errore In genere le funzioni predenite del C in caso di errore restituiscono -1 e impostano il valore di una variabile globale chiamata errno La variabile globale errno è una variabile intera che contiene il codice che identica l' errore che è stato riscontrato (tutti i codici sono deniti in genere nel le header /sys/errno.h) La funzione perror() stampa a video una stringa che descrive a parole il codice di errore memorizzato in errno
17 Gestione degli errori Esempio #include <iostream> #include <cstdio> #include <unistd.h> using namespace std; int main(int argc, char *argv[ ]){ if (argc > 1) { execlp("/bin/cat", "cat", argv[1], (char *) NULL); perror("ho fallito l' esecuzione di cat:"); return 1; } printf("utilizzo: %s text_file\n", argv[0]); return 2; }
18 Gestione degli errori Esempio Se la chiamata a execlp() fallisce il risultato sarà: Ho fallito l' esecuzione di cat: dell'errore> <descrizione Nota: la funzione execlp è una delle tante funzioni front-end di execve, utile per eseguire un eseguibile di cui si conosce il nome.
19 Input/Output a le La gestione dell' I/O a le orientata al usso fa riferimento ad un le tramite un puntatore a tipo di dato FILE (FILE *) Le funzioni per la gestione dell'i/o di basso livello utilizzano un valore intero chiamato le handle o descrittore di le
20 Input/Output a le Apertura o creazione di un le Le funzioni open() e creat() presentano i seguenti prototipi: #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> int open(const char *pathname, int flags); int open(const char *pathname, int flags, mode_t mode); int creat(const char *pathname, mode_t mode); dove pathname indica il percorso del le da aprire. Il valore di flags indica la modalità di apertura del le (lettura, scrittura, etc.). Il valore di mode esprime i permessi sul le. In caso di successo le funzioni restituiscono un intero che rappresenta il primo (più piccolo) descrittore di le disponibile. In caso di errore le funzioni restituiscono -1 e impostano l'opportuno valore di errno
21 Input/Output a le Lettura e scrittura di un le Le funzioni read() e write() presentano i seguenti prototipi: #include <unistd.h> ssize_t read(int fd, void *buf, size_t count); ssize_t write(int fd, const void *buf, size_t count); write() scrive count byte di buf nel le puntato da fd read() legge count byte dal le puntato da fd e li memorizza in buf In caso di errore restituiscono -1 e impostano l'opportuno valore di errno
22 Input/Output a le Esempio #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #define BUFFER_LENGTH 1024 /* Esegue la copia di un file */ int main(int argc, char *argv[]) { int fd_orig, fd_dest; char buffer[buffer_length]; int num_byte = 0; continua...
23 Input/Output a le Esempio if ((fd_orig = open(argv[1], O_RDONLY)) == -1) { perror("open del file origine"); exit(2); } if ((fd_dest = open(argv[2], O_RDWR O_CREAT O_TRUNC, S_IRUSR S_IWUSR S_IRGRP S_IWGRP)) == -1) { perror("open del file destinazione"); exit(3); } continua...
24 Input/Output a le Esempio while(1) { num_byte = read(fd_orig, buffer, BUFFER_LENGTH); if (num_byte == -1 ) { perror("errore in lettura"); exit(4); } else if (num_byte==0) break; if (write(fd_dest, buffer, num_byte) == -1) { perror("errore in scrittura"); exit(5); } continua...
25 Input/Output a le Esempio } } return 0; /* Fine io_basso_liv.c */
26 Input/Output a le Verica di tipo e informazioni relative ai le La funzione isatty(): #include <unistd.h> int isatty(int desc); restituisce 1 se desc è legato ad un terminale, altrimenti restituisce 0
27 Input/Output a le Verica di tipo e informazioni relative ai le Le funzioni stat() e fstat(): #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> int stat(const char *file_name, struct stat *buf); int fstat(int filedes, struct stat *buf); restituiscono informazioni sul le (timestamp dell' ultimo accesso, dell' ultima modica, UID e GID del proprietario, etc.). Le informazioni vengono salvate nella struttura dati buf (es. p2.2.cxx)
28 Allocazione dinamica della memoria Per questioni di ecienza e essibilità nei programmi C e C++ si utilizza spesso l'allocazione dinamica della memoria assegnata ad un certo tipo di dato L' allocazione dinamica della memoria avviene attraverso funzioni dedicate che rendono disponibile un area contigua di memoria, di dimensione (in byte) specicata, restituendone l' indirizzo della prima locazione N.B. Parliamo di memoria virtuale
29 Allocazione dinamica della memoria Funzioni C Le funzioni del C per l' allocazione dinamica della memoria sono: #include <stdlib.h> void *calloc(size_t nmemb, size_t size); void *malloc(size_t size); void free(void *ptr); void *realloc(void *ptr, size_t size);
30 Allocazione dinamica della memoria Funzioni C calloc() alloca memoria per un array di nmemb elementi di dimensione size. La memoria allocata viene inizializzata a 0 malloc() alloca size byte di memoria (non inizializza le locazioni allocate) free() libera la memoria precedentemente allocata puntata da ptr realloc() cambia la dimensione del blocco di memoria puntato da ptr calloc(), malloc() e realloc() restituiscono un puntatore al blocco di memoria allocato, oppure NULL in caso di fallimento; free() non restituisce alcun valore.
31 Allocazione dinamica della memoria Esempio #define SIZE_MAX 20 int func(unsigned numchar) { char *stringa = NULL; /* prevedere dei limiti all' allocazione dinamica */ if (numchar > SIZE_MAX) { numchar = SIZE_MAX; /* effettuare il cast */ stringa = (char *) malloc(sizeof(char)*numchar); if ( stringa == NULL) return -1; /* SEMPRE deallocare la memoria non piu' utile */ free(stringa); return 1; }
32 Allocazione dinamica della memoria Funzioni C++ Operatori new e delete: string *sp; sp = new string(``ciao''); delete sp; Allocazione di un array di oggetti: int *sp; sp = new int[10]; delete [] sp; Vedere es. mem_alloc.c e mem_alloc.cpp
33 Allocazione dinamica della memoria I/O da terminale in C++ Gli oggetti cin, cout e cerr cin, cout e cerr sono variabili globali dichiarate in <iostream> cin è un oggetto di tipo istream collegato allo standard input cout è un oggetto di tipo ostream collegato allo standard output cerr è un oggetto di tipo ostream collegato allo standard error
34 Allocazione dinamica della memoria I/O da terminale in C++ #include <iostream> using namespace std; // omettendo questa istruzione bisogna // riferirsi a cout e cin come std::cout e std::cin int main() { int i, j, k; cout << ``Inserisci tre numeri separati da uno spazio:''; cin >> i >> j >> k; if(i>100 j>100 k>100) cerr << ``Errore: i numeri devono essere < 100!'' << endl; continua...
35 Allocazione dinamica della memoria I/O da terminale in C++ } else cout << ``Sono stati inseriti i seguenti valori: i='' << i << ``, j='' << j << ``, k='' << k << endl; return 0;
36 Risorse utili John Shapley Gray, Interprocess Communications in LINUX, The Nooks & Crannies B. W. Kernighan, D. M. Ritchie, Il Linguaggio C, Prentice Hall Herbert Schildt, Guida al C++, Mc Graw Hill GNU/Linux, pagine man
Igino Corona
Sistemi Operativi Esercitazione 6: Comunicazione fra processi in Linux PIPE Igino Corona igino.corona@diee.unica.it 17 Novembre 2009 File In Linux, un le può essere un contenitore di informazione o uno
DettagliGestione dinamica della memoria
Programmazione M-Z Ingegneria e Scienze Informatiche - Cesena A.A. 2016-2017 Gestione dinamica della memoria Pietro Di Lena - pietro.dilena@unibo.it A pessimistic programmer sees the array as half empty.
DettagliPerché il linguaggio C?
Il linguaggio C 7 Perché il linguaggio C? Larga diffusione nel software applicativo Standard di fatto per lo sviluppo di software di sistema Visione a basso livello della memoria Capacità di manipolare
DettagliLe strutture. Una struttura C è una collezione di variabili di uno o più tipi, raggruppate sotto un nome comune.
Le strutture Una struttura C è una collezione di variabili di uno o più tipi, raggruppate sotto un nome comune. Dichiarazione di una struttura: struct point { int x; int y; }; La dichiarazione di una struttura
DettagliFile I/O. M. R. Guarracino: File I/O 1
File I/O M. R. Guarracino: File I/O 1 File I/O Gran parte delle operazioni su file in ambiente UNIX possono essere eseguite utilizzando solo cinque funzioni: open read write lseek close M. R. Guarracino:
DettagliLa gestione della memoria dinamica Heap
Laboratorio di Algoritmi e Strutture Dati La gestione della memoria dinamica Heap Prof. Luigi Lamberti 2005 Cenni sui Processi Un Programma è un insieme di Istruzioni memorizzato in un file con le costanti
DettagliIl linguaggio C. Puntatori e dintorni
Il linguaggio C Puntatori e dintorni 1 Puntatori : idea di base In C è possibile conoscere e denotare l indirizzo della cella di memoria in cui è memorizzata una variabile (il puntatore) es : int a = 50;
DettagliCORSO DI SISTEMI OPERATIVI A - ESERCITAZIONE 3
UNIVERSITÀ DEGLI STUDI DI PARMA Facoltà di Ingegneria Corso di Laurea in Ingegneria Elettronica-Informatica-Telecomunicazioni a.a. 2001-2002 CORSO DI SISTEMI OPERATIVI A - ESERCITAZIONE 3 1 Trasferimento
DettagliUso avanzato dei puntatori Allocazione dinamica della memoria
Uso avanzato dei puntatori Allocazione dinamica della memoria Violetta Lonati Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica
DettagliDigressione: man 2...
Syscall File I/O Digressione: man 2... Le funzioni della libreria standard UNIX associate alle system call di Linux sono documentate nella sezione 2 di man e.g.: man 2 open Ogni manpage di system call
DettagliCORSO DI SISTEMI OPERATIVI A - ESERCITAZIONE 3. 1 strace : visualizzazione delle system call invocate da un processo
UNIVERSITÀ DEGLI STUDI DI PARMA Facoltà di Ingegneria Corso di Laurea in Ingegneria Informatica a.a. 2005-2006 CORSO DI SISTEMI OPERATIVI A - ESERCITAZIONE 3 1 strace : visualizzazione delle system call
DettagliCompendio sottoinsieme del C++ a comune col C. (Libreria standard, Input/Output, Costanti, Dichiarazioni e typedef, Memoria Dinamica)
Compendio sottoinsieme del C++ a comune col C (Libreria standard, Input/Output, Costanti, Dichiarazioni e typedef, Memoria Dinamica) Librerie 1/2 Il solo insieme di istruzioni di un linguaggio di programmazione
DettagliL'Allocazione Dinamica della Memoria nel linguaggio C
L'Allocazione Dinamica della Memoria nel linguaggio C Prof. Rio Chierego riochierego@libero.it http://www.riochierego.it/informatica.htm Sommario Questo documento tratta l'allocazione dinamica della memoria
DettagliDirectory. Le directory unix sono file.
Le directory unix sono file. Directory Molte system call per i file ordinari possono essere utilizzate per le directory. E.g. open, read, fstat, close. Tuttavia le directory non possono essere create con
DettagliPer operare su un file abbiamo bisogno di aprirlo, scriverlo, leggerlo, chiuderlo:
I/O (Input/Output) System Call di I/O 2 Per operare su un file abbiamo bisogno di aprirlo, scriverlo, leggerlo, chiuderlo: open (e creat) write read close lseek 1 File descriptors 3 File descriptor (fd)
DettagliLe strutture. Una struttura C è una collezione di variabili di uno o più tipi, raggruppate sotto un nome comune.
Le strutture Una struttura C è una collezione di variabili di uno o più tipi, raggruppate sotto un nome comune. Dichiarazione di una struttura: struct point { int x; int y; }; La dichiarazione di una struttura
DettagliEsercitazione di Lab. di Sistemi Operativi 1 a.a. 2011/2012
Sommario: Esercitazione di Lab. di Sistemi Operativi 1 a.a. 2011/2012 - System Call Parte 1 open (apertura file) creat (creazione file) close (chiusura file) write (scrittura file) read (lettura file)
DettagliPuntatori. Un puntatore contiene un numero che indica la locazione di memoria dove è presente la variabile puntata
Puntatori int i = 10; int * pi = &i; pi i = 10 116 int * pi = pi contiene un informazione che mi permette di accedere ( puntare ) ad una variabile intera Un puntatore contiene un numero che indica la locazione
DettagliCorso di Fondamenti di Informatica. Puntatori e Allocazione Dinamica
Corso di Fondamenti di Informatica Puntatori e Allocazione Dinamica I puntatori (Richiamo) Il C++ prevede puntatori a dati di qualsiasi natura, semplici o strutturati e puntatori a funzione. In particolare
DettagliSystem calls. permettono ai programmi utente di richiedere servizi al Sistema Operativo. servizi come scrittura di file, stampa su video, ecc.
Le System Calls System calls permettono ai programmi utente di richiedere servizi al Sistema Operativo servizi come scrittura di file, stampa su video, ecc. corrispondenti procedure di libreria GNU C Library
DettagliC: panoramica. Violetta Lonati
C: panoramica Violetta Lonati Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica AA 2009/2010 Violetta Lonati
DettagliLaboratorio di Sistemi Operativi
II Semestre - Marzo/Giugno 2008 matricole congr. 0 mod 3 I/O non bufferizzato-2 dup, dup2 System Call sync, fsync, fdatasync fcntl 2 1 Condivisione di file Unix supporta la possibilità che più processi
DettagliSistemi Operativi Teledidattico
Sistemi Operativi Teledidattico Anno 2002 3a esercitazione 5/10/2002 Paolo Torroni processi fork (creazione di un figlio) exec (sostituzione di codice del programma in esecuzione) wait (attesa della terminazione
DettagliScrivere alla fine di un file Vi sono due modi per scrivere alla fine di un file:
Scrivere alla fine di un file Vi sono due modi per scrivere alla fine di un file: usare lseek per spostarsi alla fine del file e poi scrivere: lseek(filedes, (off_t)0, SEEK_END); write(filedes, buf, BUFSIZE);
DettagliPrimi passi col linguaggio C
Andrea Marin Università Ca Foscari Venezia Laurea in Informatica Corso di Programmazione part-time a.a. 2011/2012 Come introdurre un linguaggio di programmazione? Obiettivi: Introduciamo una macchina astratta
DettagliProgrammazione di sistema in Linux: gestione dei file. E. Mumolo
Programmazione di sistema in Linux: gestione dei file E. Mumolo Struttura di Linux System Call per il file system System Call per i processi Hardware: dischi, CPU, monitor, tastiera, schede di rete, porte
DettagliUnità Didattica 4 Linguaggio C. Vettori. Puntatori. Funzioni: passaggio di parametri per indirizzo.
Unità Didattica 4 Linguaggio C Vettori. Puntatori. Funzioni: passaggio di parametri per indirizzo. 1 Vettori Struttura astratta: Insieme di elementi dello stesso tipo, ciascuno individuato da un indice;
DettagliLe operazioni di allocazione e deallocazione sono a carico del sistema.
Allocazione della memoria In C++ è possibile creare (allocare) variabili in maniera statica o dinamica. Nell allocazione statica una variabile esiste ed è utilizzabile dal momento della sua dichiarazione
DettagliFile 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
Dettagliprova.c #include <stdio.h> char funzione(char); codice oggetto del main()
prova.c #include char funzione(char); {char c= a ; printf( Ecco il carattere: %c\n,c); c=funzione(c); printf( Ecco il carattere modificato: %c\n,c); char funzione(char tmp) {if(tmp
DettagliSistemi Operativi (M. Cesati)
Sistemi Operativi (M. Cesati) Compito scritto del 2 luglio 2015 (Turno 1) Nome: Matricola: Corso di laurea: Cognome: Crediti da conseguire: 5 6 9 Scrivere i dati richiesti in stampatello. Al termine consegnare
DettagliL Allocazione Dinamica della Memoria
L Allocazione Dinamica della Memoria Maurizio Palesi DIIT Università di Catania Viale Andrea Doria 6, 95125 Catania mpalesi@diit.unict.it http://www.diit.unict.it/users/mpalesi Sommario Questo documento
DettagliUniversità degli Studi di Cassino Corso di Fondamenti di Informatica Tipi strutturati: Stringhe. Anno Accademico 2010/2011 Francesco Tortorella
Corso di Informatica Tipi strutturati: Stringhe Anno Accademico 2010/2011 Francesco Tortorella Stringhe di caratteri La stringa è il tipo strutturato con cui vengono rappresentati gruppi di caratteri quali
DettagliBreve Riepilogo del Linguaggio C
Breve Riepilogo del Linguaggio C Note Gli script shell cominciano sempre con la seguente riga: #!/bin/sh NON esistono spazi all'interno della stringa #!/bin/sh NON ci sono altri caratteri (oltre il newline)
DettagliInformatica 1 Tipi e dichiarazioni in C++ C++ - Tipi e dichiarazioni 1
Informatica 1 Tipi e dichiarazioni in C++ C++ - Tipi e dichiarazioni 1 Cosa è il C++ E un linguaggio di programmazione derivato dal C Può essere usato per modificare il SO Unix e i suoi derivati (Linux)
DettagliPrecedenza e associatività. Complementi sul C - 2. Esempi. Esempi
Complementi sul C - 2 Ver. 2.4 2010 - Claudio Fornaro - Corso di programmazione in C Precedenza e associatività () [] ->. S D! ~ ++ + * & (cast ) sizeof S D * / % S D + - (somma e sottrazione) S D >
Dettaglipuntatori Lab. Calc. AA 2007/08 1
puntatori Lab. Calc. AA 2007/08 1 parametri delle funzioni (dalla lezione scorsa) gli argomenti in C vengono passati by value dalla funzione chiamante alla funzione chiamata la lista degli argomenti viene
DettagliLaboratorio di Sistemi Operativi primavera 2009
primavera 2009 stat,fstat e lstat File & Directory (1) int stat (const char *pathname, struct stat *buf); int fstat (int fd, struct stat *buf); int lstat (const char *pathname,
DettagliI puntatori e l allocazione dinamica di memoria
I puntatori e l allocazione dinamica di memoria L allocazione delle variabili Allocazione e rilascio espliciti di memoria Le funzioni malloc e free 2 2006 Politecnico di Torino 1 Allocare = collocare in
DettagliLe basi del linguaggio Java
Le basi del linguaggio Java Compilazione e interpretazione Quando si compila il codice sorgente scritto in Java, il compilatore genera il codice compilato, chiamato bytecode. È un codice generato per una
DettagliUniversità degli Studi di Cassino e del Lazio Meridionale Corso di Fondamenti di Informatica Allocazione dinamica di memoria
di Cassino e del Lazio Meridionale Corso di Informatica Allocazione dinamica di memoria Anno Accademico 2015/2016 Francesco Tortorella Allocazione dinamica di memoria Finora abbiamo considerato variabili
DettagliChiamate di sistema per la Inter Process Communication (IPC) in POSIX. E.Mumolo, DEEI mumolo@units.it
Chiamate di sistema per la Inter Process Communication (IPC) in POSIX E.Mumolo, DEEI mumolo@units.it Pipe Cos'è un pipe? E' un canale di comunicazione che unisce due processi Caratteristiche: La più vecchia
DettagliLaboratorio di Sistemi Operativi
II Semestre - Marzo/Giugno 2008 Matricole congr. 0 mod 3 File & Directory #include #include stat,fstat e lstat int stat (const char *pathname, struct stat *buf); int fstat (int
DettagliLab. di Sistemi Operativi - Esercitazione n 9- -Thread-
Lab. di Sistemi Operativi - Esercitazione n 9- -Thread- 1 Sommario Esercizi su: Comunicazione tra processi: la funzione pipe() Condivisione dati e codice tra due o più processi: concetto di Thread 2 -
DettagliLinguaggio C. Generalità sulle Funzioni. Variabili locali e globali. Passaggio di parametri per valore.
Linguaggio C Generalità sulle Funzioni. Variabili locali e globali. Passaggio di parametri per valore. 1 Funzioni Generalizzazione del concetto di funzione algebrica: legge che associa a valori delle variabili
DettagliI puntatori. Un puntatore è una variabile che contiene l indirizzo di un altra variabile. puntatore
I puntatori Un puntatore è una variabile che contiene l indirizzo di un altra variabile. puntatore...... L operatore & fornisce l indirizzo di un oggetto: p = &c; assegna a p l indirizzo di c, i.e., p
DettagliLezione 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
DettagliSulla libreria standard, III. Manipolare file con stdio.h
Sulla libreria standard, III Manipolare file con stdio.h 1 Libreria per input/output Con libreria si intende una collezione di sottoprogrammi che vengono utilizzati per lo sviluppo di software non eseguibili,
DettagliProcessi in Linux. Igino Corona igino.corona@diee.unica.it. 20 Ottobre 2009
Sistemi Operativi Processi in Linux Igino Corona igino.corona@diee.unica.it 20 Ottobre 2009 Contenuti della lezione Come funzionano i programmi in Linux? Schema base di esecuzione di un programma Modalità
DettagliI Processi nel SO UNIX
I Processi nel SO UNIX Processi UNIX UNIX è un sistema operativo multiprogrammato a divisione di tempo: unità di computazione è il processo Caratteristiche del processo UNIX: processo pesante con codice
DettagliProgetto II: Il linguaggio C e le chiamate di sistema sui processi
Progetto II: Il linguaggio C e le chiamate di sistema sui processi Scrivere un programma C psstat.c che svolga quanto segue: se invocato senza parametri deve stampare su standard output un istogramma orizzontale
DettagliLezione 21 e 22. Valentina Ciriani ( ) Laboratorio di programmazione. Laboratorio di programmazione. Lezione 21 e 22
Lezione 21 e 22 - Allocazione dinamica delle matrici - Generazione di numeri pseudocasuali - Funzioni per misurare il tempo - Parametri del main - Classificazione delle variabili Valentina Ciriani (2005-2008)
DettagliOperazioni su file di caratteri
Operazioni su file di caratteri Apertura fopen Chiusura fclose Scrittura fprintf Lettura fscanf Controllo fine file feof Prof. E. Occhiuto INFORMATICA 242AA a.a. 2010/11 pag. 1 Apertura di un file: Si
DettagliIl File-System. I file in ambiente Linux Stefano Quer Dipartimento di Automatica e Informatica Politecnico di Torino
Il File-System I file in ambiente Linux Stefano Quer Dipartimento di Automatica e Informatica Politecnico di Torino 2 File System Il file-system è uno degli aspetti più visibili di un sistema operativo
DettagliGESTIONE DEI FILE IN C. Docente: Giorgio Giacinto AA 2008/2009
Università degli Studi di Cagliari Corso di Laurea Specialistica in Ingegneria per l Ambiente ed il Territorio Corso di Laurea Specialistica in Ingegneria Civile - Strutture FONDAMENTI DI INFORMATICA 2
DettagliAddendum alle chiamate di sistema per la gestione processi. E Mumolo
Addendum alle chiamate di sistema per la gestione processi E Mumolo Definiamo un processo proc.c che scrive l'argomento passato in linea: void main(int argc, char *argv[]){ printf("sono il processo %s\n",
DettagliIntroduzione ai puntatori
Introduzione ai puntatori Algoritmicamente November 19, 2009 http://algoritmicamente.wordpress.com/ 1 Concetti fondamentali Nei linguaggi quali C, C++, il concetto e l'uso dei puntatori è estremamente
DettagliDefinizione Allocazione e deallocazione di variabili Allocazione e deallocazione di vettori
Università degli Studi di Cagliari Corso di Laurea in Ingegneria Biomedica (Industriale), Chimica, Meccanica, Elettrica FONDAMENTI DI INFORMATICA 1 http://www.diee.unica.it/~marcialis/fi1 A.A. 2010/2011
DettagliIntroduzione alla programmazione in linguaggio C
Introduzione alla programmazione in linguaggio C Il primo programma in C commento Header della libreria Funzione principale Ogni istruzione in C va terminata con un ; Corso di Informatica AA. 2007-2008
DettagliL apertura di un file ci restituisce un puntatore a una struttura chiamata FILE fopen:
I FILE L apertura di un file ci restituisce un puntatore a una struttura chiamata FILE FILE *mfptr = NULL; mfptr = fopen( nome_del_file.txt, w ); fopen: primo argomento: nome del file secondo argomento:
DettagliStringhe e allocazione dinamica della memoria
Stringhe e allocazione dinamica della memoria Esercizio Scrivere un programma strings.c che legge da standard input una sequenza di parole separate da uno o più spazi, e stampa le parole lette, una per
DettagliVariabili dinamiche. Obiettivi: Presentare le variabili dinamiche, allocate e deallocate nell area HEAP, e le funzioni malloc e free
Variabili dinamiche Obiettivi: Presentare le variabili dinamiche, allocate e deallocate nell area HEAP, e le funzioni malloc e free 1 Tipi di variabili in C In C è possibile classificare le variabili in
DettagliIl linguaggio C. Puntatori e dintorni
Il linguaggio C Puntatori e dintorni 1 Puntatori : idea di base In C è possibile conoscere e denotare l indirizzo della cella di memoria in cui è memorizzata una variabile (il puntatore) es : int a = 50;
DettagliLab. di Sistemi Operativi - Esercitazione n 7- -Gestione dei processi Unix-
Lab. di Sistemi Operativi - Esercitazione n 7- -Gestione dei processi Unix- 1 Sommario Esercizi sulla gestione dei processi Creazione di un nuovo processo: fork Sincronizzazione tra processi: wait 2 -
DettagliCapitolo 5 -- Stevens
Libreria standard di I/O Capitolo 5 -- Stevens Libreria standard di I/O rientra nello standard ANSI C perché è stata implementata su molti sistemi operativi oltre che su UNIX le sue funzioni individuano
DettagliProcessi in Linux. Stru/ura file eseguibili
SISTEMI OPERATIVI Processi in Linux Stru/ura file eseguibili» ELF - Executable and Linking Format formato di default degli eseguibili in Linux definizione nel file include » StruGura un header contenente
DettagliComandi. Sistema Operativo
Introduzione Programmazione di sistema in UNIX File comandi utente Shell Comandi Sistema Operativo Programmi in C Servizi di sistema (primitive, system call) solo per driver fork exec wait exit char I/O
DettagliAllocazione Dinamica della Memoria
Allocazione Dinamica della Memoria Elisa Marengo Università degli Studi di Torino Dipartimento di Informatica Elisa Marengo (UNITO) Allocazione Dinamica della Memoria 1 / 10 Scelta delle variabili Quando
DettagliPreprocessore, linker e libreria standard
Preprocessore, linker e libreria standard Università degli Studi di Brescia Prof. Massimiliano Giacomin Elementi di Informatica e Programmazione Università di Brescia 1 IL PREPROCESSORE Programma sorgente
DettagliI 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
DettagliAllocazione dinamica della memoria
Allocazione dinamica della memoria Allocazione statica: limiti Per quanto sappiamo finora, in C le variabili sono sempre dichiarate staticamente la loro esistenza deve essere prevista e dichiarata a priori
DettagliIstituto Tecnico Industriale M. M. Milano Polistena. Classe III D a.s. 2015/2016 C++ Guida Base
Istituto Tecnico Industriale M. M. Milano Polistena Classe III D a.s. 2015/2016 C++ Guida Base Prof. Rocco Ciurleo - ITIS M. M. Milano Polistena - 3 D a.s. 2015/2016 1 Le Origini Il Linguaggio C++ è il
DettagliIl linguaggio C. Puntatori e Array
Il linguaggio C Puntatori e Array Puntatori I puntatori sono variabili i cui valori sono indirizzi di locazioni in cui sono memorizzate altre variabili architettura a 32 bit: 232-1 indirizzi, ma non si
DettagliFunzioni e. Alessandra Giordani Mercoledì 16 maggio 2012
Funzioni e passaggio parametri Alessandra Giordani agiordani@disi.unitn.it Mercoledì 16 maggio 2012 http://disi.unitn.it/~agiordani/ Cosa vedremo oggi Le funzioni Il passaggio dei parametri Le dichiarazioni
DettagliUniversità di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca.
Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2017-18 Pietro Frasca Lezione 9 Giovedì 2-11-2017 Comunicazione con pipe Oltre che con la memoria condivisa
DettagliCorso di Fondamenti di Informatica
Corso di Fondamenti di Informatica Il tipo puntatore; l allocazione dinamica della memoria Claudio De Stefano - Corso di Fondamenti di Informatica 1 puntatori una variabile di tipo puntatore al tipo x
DettagliEsercizio 1: funzione con valore di ritorno di tipo puntatore
Esercitazione Fondamenti di Informatica B Corso di Laurea in Ingegneria Meccanica 7 Esercitazione: 14 dicembre 2005 Esercizi su ricorsione, manipolazione stringhe, strutture dinamiche Problema: Esercizio
DettagliDigressione: man (2)...
Syscall File I/O Digressione: man (2)... Le funzioni della libreria standard UNIX associate alle system call di Linux sono documentate nella sezione 2 di man e.g.: man 2 open Ogni manpage di system call
DettagliIl sistema C è formato dal linguaggio C, dal preprocessore, dal compilatore, dalle librerie e da altri strumenti di supporto.
Sistema C e organizzazione del codice Il sistema C è formato dal linguaggio C, dal preprocessore, dal compilatore, dalle librerie e da altri strumenti di supporto. Un programma C è costituito da un insieme
Dettagli&& (nessun altro processo ha il file aperto) && (il fd e chiuso) Cancella il file;
CREAZIONE ritorna fd o 1 Pseudocodice dell operazione: If(file esiste) If(Write permission) Tronca la lunghezza a 0 e lascia il file aperto in scrittura; Else Exit(-1); Else Alloca un nuovo INODE con link=1
DettagliCorso di Laboratorio di Sistemi Operativi
Corso di Laboratorio di Sistemi Operativi Lezione 5 Alessandro Dal Palù email: alessandro.dalpalu@unipr.it web: www.unipr.it/~dalpalu Processi in Unix Approfondimenti: http://gapil.gnulinux.it/download/
DettagliScrivere alla fine di un file Vi sono due modi per scrivere alla fine di un file:
Scrivere alla fine di un file Vi sono due modi per scrivere alla fine di un file: usare lseek per spostarsi alla fine del file e poi scrivere: lseek(filedes, (off_t)0, SEEK_END); write(filedes, buf, BUFSIZE);
DettagliEsercitazione 11. Liste semplici
Esercitazione 11 Liste semplici Liste semplici (o lineari) Una lista semplice (o lineare) è una successione di elementi omogenei che occupano in memoria una posizione qualsiasi. Ciascun elemento contiene
DettagliCorso di Sistemi Operativi Esercitazioni
Università di Roma La Sapienza Dipartimento di Informatica e Sistemistica Corso di Sistemi Operativi Esercitazioni Lezione IX Esempio di progetto Server HTTP 0.9 Server HTTP 0.9 Specifiche Si chiede di
DettagliAppunti del corso di Informatica 1. 6 Introduzione al linguaggio C
Università di Roma Tre Dipartimento di Matematica e Fisica Corso di Laurea in Matematica Appunti del corso di Informatica 1 (IN110 Fondamenti) 6 Introduzione al linguaggio C Marco Liverani (liverani@mat.uniroma3.it)
DettagliCorso di Reti di Calcolatori L-A
Università degli Studi di Bologna Facoltà di Ingegneria Corso di Reti di Calcolatori L-A Esercitazione 9 (svolta) RPC: Inizializzazione Strutture Dati sul Server Luca Foschini Anno accademico 2010/2011
DettagliDIPARTIMENTO DI ELETTRONICA E INFORMAZIONE. File. Marco D. Santambrogio Ver. aggiornata al 15 Maggio 2013
File Marco D. Santambrogio marco.santambrogio@polimi.it Ver. aggiornata al 15 Maggio 2013 Obiettivi Alcuni problemi aperti Il main() Allocazione dinamica della memoria Il salvataggio dei dati File File
DettagliStrutture Dati Dinamiche
Strutture Dati Dinamiche Motivazioni Le variabili considerate fino a questo punto devono essere dichiarate staticamente, ossia la loro esistenza, il loro nome e la loro dimensione devono essere previsti
DettagliSmallShell Piccolo processore comandi
SmallShell Piccolo processore comandi /* file smallsh.h */ #include #include #define EOL 1 #define ARG 2 #define AMPERSAND 3 #define SEMICOLON 4 #define RIDIRIN 5 #define RIDIROUT 6
DettagliDal C al C++ Corso di Linguaggi di Programmazione ad Oggetti 1. a cura di Giancarlo Cherchi
Dal C al C++ Corso di Linguaggi di Programmazione ad Oggetti 1 a cura di Giancarlo Cherchi 1 Commenti Non aumentano la dimensione del programma eseguibile ma si rivelano utili per riassumere il comportamento
DettagliSystem call per la gestione di processi
System call per la gestione di processi Chiamate di sistema per creazione di processi: fork() sostituzione di codice e dati: exec...() terminazione: exit() sospensione in attesa della terminazione di figli:
DettagliProgrammazione di base
Fondamenti di Informatica Primo Appello 01-17 8 febbraio 017 Rispondi alle domande negli appositi spazi. I punti assegnati per ogni domanda sono indicati nel riquadro a lato. L'esame contiene 10 domande,
DettagliAllocazione dinamica della memoria
Andrea Marin Università Ca Foscari Venezia Laurea in Informatica Corso di Programmazione part-time a.a. 2011/2012 Tipi di memoria dati Nella macchina astratta C esistono tre tipi di memoria per allocare
DettagliComplementi. - Ridefinizione di tipo - - Costrutto switch - - Programmazione su più file - - Parametri della funzione main - Funzione system -
Complementi - Ridefinizione di tipo - - Costrutto switch - - Programmazione su più file - - Parametri della funzione main - Funzione system - Università degli Studi di Brescia Prof. Massimiliano Giacomin
DettagliL ambiente di un processo (I)
L ambiente di un processo (I) L ambiente di un processo è un insieme di stringhe (terminate da \0). Un ambiente è rappresentato da un vettore di puntatori a caratteri terminato da un puntatore nullo. Ogni
DettagliProcessi UNIX. I Processi nel SO UNIX. Gerarchie di processi UNIX. Modello di processo in UNIX
Processi UNIX I Processi nel SO UNIX UNIX è un sistema operativo multiprogrammato a divisione di tempo: unità di computazione è il processo Caratteristiche del processo UNIX: processo pesante con codice
DettagliInput/Output. Lettura e scrittura Caratteri e Stringhe: Terminale e file. Input/output. caratteri stringhe formattato ascii binari
Input/Output Lettura e scrittura Caratteri e Stringhe: Terminale e file Input/output console file caratteri stringhe formattato ascii binari Linguaggio ANSI C Input/Output - 1 La libreria standard del
DettagliBloodshed Dev-C++ Bloodshed Dev-C++ è l IDE usato durante le esercitazioni/laboratorio. IDE = Integrated Development Environment. Codice corso: 21012
Bloodshed Dev-C++ Bloodshed Dev-C++ è l IDE usato durante le esercitazioni/laboratorio IDE = Integrated Development Environment Pagina 1 di 8 Dev-C++ - Installazione Con sistema operativo Windows, potete
DettagliI/O su Socket TCP: read()
I/O su Socket TCP: read() I socket TCP, una volta che la connessione TCP sia stata instaurata, sono accedibili come se fossero dei file, mediante un descrittore di file (un intero) ottenuto tramite una
DettagliIl processo figlio : utilizza lo stesso codice che sta eseguendo il padre ;
La creazione di un nuovo processo in UNIX int fork(void); Viene creato un nuovo processo (figlio) identico (stesso codice, area dati copiata) al processo (padre) che ha invocato la fork Solo il valore
Dettagli