CORSO DI SISTEMI OPERATIVI A - ESERCITAZIONE 2

Documenti analoghi
Debug di un programma

Introduzione a Visual Studio 2005

Preprocessore, linker e libreria standard

prova.c #include <stdio.h> char funzione(char); codice oggetto del main()

IDE DevC

Comandi principali di Linux (1)

Complementi. - Ridefinizione di tipo - - Costrutto switch - - Programmazione su più file - - Parametri della funzione main - Funzione system -

Primi passi col linguaggio C

Shell BASH. Variabili Redirezione

Unità Didattica 1 Linguaggio C. Fondamenti. Struttura di un programma.

Lab 01 Introduzione a Codelite

Editor di testo. Ing. Simone Brienza. Corso di laurea magistrale in Ingegneria Elettronica

Università di Ferrara Facoltà di Ingegneria. Esercitazioni di FONDAMENTI DI INFORMATICA MODULO B

Linguaggio C: Introduzione ad ambienti di sviluppo integrati (IDE) e a Dev-C++ Università degli Studi di Brescia

Il compilatore Dev-C++

Precedenza e associatività. Complementi sul C - 2. Esempi. Esempi

Video Scrittura (MS Word) Prima Parte

L INTERFACCIA GRAFICA DI EXCEL

INTRO a MS Visual Studio 2008: LINEA di COMANDO

Video Scrittura (MS Word)

Lab 01 Introduzione a Codelite

Introduzione a GCC: GNU Compiler Collection

INTRODUZIONE A VISUAL STUDIO

Informatica Applicata Laboratorio 1. Ing. Antonella Dimasi

L ambiente UNIX/Linux. Strumenti per la programmazione C Stefano Quer Dipartimento di Automatica e Informatica Politecnico di Torino

Lab. di Sistemi Operativi

Corso di Informatica


(0$&6HGLWRUIXOOVFUHHQ

Uso del computer e gestione dei file con Windows

Gestione dei file. Stefano Ferrari. Università degli Studi di Milano Programmazione. anno accademico

Mirko Mariotti. March 9, 2009

Funzioni. Il modello console. Interfaccia in modalità console

Integrated Development Environment (IDE) DevC Manuale utente

COSTRUZIONE DI UN APPLICAZIONE

Strategie di programmazione

Il sistema operativo UNIX/Linux. Soluzione di problemi mediante script Stefano Quer Dipartimento di Automatica e Informatica Politecnico di Torino

Introduzione a Visual Studio Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni

Sistemi Operativi 1. Mattia Monga. a.a. 2012/13. Dip. di Informatica Università degli Studi di Milano, Italia

ESECUZIONE DI PROGRAMMI C SU MACCHINE REALI. Docente: Giorgio Giacinto AA 2008/2009. formalizzazione degli algoritmi in linguaggio C

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

Windows. La prima realizzazione di un ambiente grafico si deve alla Apple (1984) per il suo Macintosh. La gestione dei file conserva la logica del DOS

La programmazione in linguaggio C

U.T.E FOGLIO ELETTRONICO. Università della Terza Età. Sede di Novate Milanese. Corso Informatica Approfondimento. Docente: Giovanni Pozzi

Raccolta e memorizzazione dei dati immessi nei moduli dai visitatori

U.T.E Università della Terza Età

3.5.1 PREPARAZ1ONE I documenti che si possono creare con la stampa unione sono: lettere, messaggi di posta elettronica, o etichette.

Cenni sul preprocessore e il suo utilizzo

Programmazione I - Laboratorio

Sistemi Operativi. Corso di Laurea Triennale in Ingegneria Informatica. Esercitazione 2. Editor Utenti Permessi

Directory. Le directory unix sono file.

Laboratorio di Algoritmi e Strutture Dati

Fondamenti di Informatica 9. Esercitazione in linguaggio C

Lezione 3: Programmazione della Shell di Unix

Funzioni e. Alessandra Giordani Mercoledì 16 maggio 2012

Introduzione al DEV C++

EXCEL: FORMATTAZIONE E FORMULE

Istituto Scolastico Paritario Vincenza Altamura Scuola Primaria. Anno scolastico 2016/2017 Progettazione Didattica Disciplinare per la classe III

DEFINIZIONI SMART E RELATIVE ESERCITAZIONI

Indovina la lettera...

USO DELLA TASTIERA E DEL MOUSE

USO DELLA TASTIERA E DEL MOUSE

Funzioni, Stack e Visibilità delle Variabili in C

Come utilizzare i riferimenti assoluti e relativi in Microsoft Excel

Linguaggio C: introduzione

Istituto Scolastico Paritario Vincenza Altamura. Scuola Primaria. Anno scolastico 2015/2016 Progettazione Didattica Disciplinare per la classe III

Lab 1: Marzo 2013

Laboratorio in C su Processi e POSIX IPC (Inter Process Communications) Dalla nona lezione di laboratorio in avanti

Automatizzare le attività con le macro di Visual Basic

Linguaggio C. Appunti per il corso di Laboratorio di Algoritmi e Strutture Dati. Stefano Aguzzoli

Fabio Scotti ( ) Laboratorio di programmazione per la sicurezza. Valentina Ciriani ( ) Laboratorio di programmazione

Inserire un nuovo foglio

Importazione dati. e/fiscali Spesometro - Rel con gestionale e/satto. Gestionale e/satto

Sviluppare un programma in FORTRAN

Linux e la shell Bash

Informatica di Base

Operazioni sulle stringhe Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR

FAQ per l'utilizzo del progetto template di Allplan per DOCFA 4 TN

Video Scrittura (MS Word) Lezione 1 Funzioni di base

ESECUZIONE DI PROGRAMMI C SU MACCHINE REALI. Docente: Giorgio Giacinto AA 2009/2010

Fac-simile TVI Informatica Facoltà di Economia Università degli studi di Bergamo

EXCEL: FORMATTAZIONE E FORMULE

Università degli Studi di Cassino Corso di Fondamenti di Informatica Tipi strutturati: Stringhe. Anno Accademico 2010/2011 Francesco Tortorella

Compilazione separata. Come realizzare correttamente un piccolo progetto su piu' file

Sviluppo dei Programmi

Excel. I fogli di calcolo Le funzioni base Gli strumenti. 1

Gestione di files Motivazioni

I File Batch. Definizione di File Batch

Laboratorio. Sistemi Operativi: Linux/Windows. Giovanni Da San Martino

IL CONCETTO DI FILE. È illecito operare oltre la fine del file.

Introduzione al Linguaggio C Corso di Informatica Laurea in Fisica

Lezione 21 e 22. Valentina Ciriani ( ) Laboratorio di programmazione. Laboratorio di programmazione. Lezione 21 e 22

Il linguaggio di programmazione Python

PRECORSO DI INFORMATICA. Laboratorio Seconda Parte

Fortran in pillole : prima parte

Elementi di C++ di base

Il DOS diagramma di flusso. I comandi del DOS. I comandi: vista funzionale. Parametri. Opzioni. I comandi: sintassi

File di script. I File di Script Corso 2D - R.Virili 1

MANUALE UTENTE UPLOADER JAVA

Questo materiale è reperibile a questo indirizzo: PAS

Transcript:

UNIVERSITÀ DEGLI STUDI DI PARMA Facoltà di Ingegneria Corso di Laurea in Ingegneria Informatica a.a. 2005-2006 CORSO DI SISTEMI OPERATIVI A - ESERCITAZIONE 2 1 Editor di testi Sono disponibili numerosi editor di testi sotto Linux, buona parte di essi ha un utilizzo intuitivo. In particolare vi suggeriamo di cominciare utilizzando kate o kwrite. Per esempio, dallo Shell, avviare l editor con: kate & Utilizzando i menu è possibile ad esempio creare nuovi file, aprire file salvati e salvare copie del file in uso. Quando si salva un file, controllare in quale direttorio viene salvato in modo da procedere alla compilazione nel direttorio corretto. Se si sta scrivendo un programma e il file viene salvato con estensione.c, kate utilizzerà un evidenziazione a colori utile alla programmazione. Alcuni comandi rapidi da tastiera (tutti riproducibili tramite mouse): per creare una selezione tenere premuto Shift e spostare il cursore con le freccette della tastiera Ctrl x: taglia; Ctrl c: copia; Ctrl v: incolla. I prossimi due comandi funzionano solo se il file ha già un nome che fa comprendere all editor che si sta scrivendo un programma (es.: se l estensione è.c ). Ctrl d: commenta o la riga su cui si trova il cursore o la selezione se ne è attiva una; Ctrl Shift d: decommenta. 2 Script Utilizzare l editor di testi per creare un certo numero di file contenenti parole a caso; salvare i file con estensioni diverse (ad esempio.txt,.dat, ecc.). Successivamente copiare il seguente script, che è una variante di quello visto a lezione (salvare con il nome sposta): #! /bin/sh if (test $# -ne 2) then echo "Uso: $0 estensione direttorio" exit -1 fi if (test! -d $2) then echo "Il direttorio $2 non esiste, adesso lo creo" mkdir $2 fi

echo "Dimmi la parola che devo cercare: " read parola for i in *.$1 do echo "Esamino il file $i" if (grep $parola $i) then echo "Sposto $i in $2" mv $i $2 fi done Lo script serve a spostare in un direttorio (specificato dall utente) tutti i file con una certa estensione (anch essa specificata dall utente) e che contengono una certa parola (che lo script chiede all utente). Eseguire lo script con il comando: sh sposta <estensione> <direttorio> (ad esempio: sh sposta txt dirprova) Se il direttorio specificato dall utente non esiste, viene creato dallo script. 3 Compilazione dei programmi Esercizio 1 (scrivere il seguente programma C e salvarlo come hello.c): printf("hello world!\n"); Dallo Shell, utilizzare gcc nel seguente modo: gcc -o hello hello.c L opzione -o seguita da hello comunica a gcc che deve creare un file eseguibile chiamato hello. Verificare che il programma funziona, scrivendo nello Shell:./hello Se non si scrive -o filename, il compilatore gcc crea un eseguibile chiamato a.out. Inserire altre opzione prima o dopo -o filename, non in mezzo! In generale, la sintassi del comando gcc è: gcc <opzioni> <filename> Oltre a -o, le opzioni più comuni sono: -c per creare il file oggetto anzichè l eseguibile: gcc -c hello.c (verificare che il comando precedente genera il file oggetto hello.o) -Wall genera tutti i messaggi di warning che gcc può fornire (si consiglia di utilizzarla sempre) -pedantic mostra tutti gli errori e i warning richiesti dallo standard ANSI C -O -O1 -O2 -O3 servono per definire il livello di ottimizzazione (dal più basso al più alto)

-O0 per non avere nessuna ottimizzazione -g per un successivo debugging Per creare l eseguibile a partire dal file oggetto: gcc hello.o -o hello Quest ultima operazione prende il nome di linking, che in generale consiste nella risoluzione dei simboli tra programmi e l inclusione di eventuali librerie. Esercizio 2 (scrivere il seguente programma C e salvarlo come squareroot.c): #include <math.h> double m, n; m = 12345; n = sqrt(m); printf("the square root of %f is %f.\n", m, n); Verificare il fallimento del comando: gcc -o squareroot squareroot.c Verificare il successo del comando: gcc -o squareroot squareroot.c -lm Non basta infatti includere nel sorgente il file header math.h, serve l opzione -lm per indicare al gcc di effettuare il linking della libreria matematica. 4 Debugging Una applicazione per il debugging è ddd, che può essere messa in esecuzione dallo Shell. Esercizio 3: double m, n; m = 1234.5678; n = 9.999; m = n; printf("m = %f, n = %f\n", m, n);

Il programma (per comodità chiamato prova.c) deve essere compilato con l opzione -g: gcc -g -o prova prova.c A questo punto, richiamare ddd. L interfaccia di ddd è divisa in più finestre; quella più in basso permette di inserire comandi da tastiera (in particolare, permette di utilizzare il programma di debug gdb). Per una consultazione rapida delle possibilità offerte da questa applicazione, digitare il comando help. Esercitazione con i comandi più comuni (tutti riproducibili tramite mouse): 1. Caricamento del programma target: file prova 2. Esecuzione del programma: run 3. Le 10 righe attorno alla stringa main: list main 4. Inserire un breakpoint in corrispondenza di main: break main o b main 5. Informazioni sui breakpoint creati: info breakpoints 6. Se ora si utilizza il comando run, il programma viene eseguito fino al breakpoint 7. Esecuzione passo-passo: step (per ripetere basta premere invio) 8. Continuare l esecuzione interrotta: cont 9. Ripetere i punti 2..6 10. Inserire un watchpoint per monitorare una variabile (m, ad esempio): watch m 11. Continuare l esecuzione interrotta: cont Si noti che questa volta l esecuzione non arriva fino in fondo, ma si ferma appena il valore di m cambia; per continuare nuovamente, fino al successivo cambiamento del valore della variabile, ripetere il comando cont (basta premere invio). 5 Argomenti da riga di comando Per passare informazioni alla funzione main() si utilizzano in genere gli argomenti della riga di comando, scritti nello shell dopo il nome del programma da eseguire. Il C prevede l uso di due speciali parametri: argc e argv, utilizzati per ricevere gli argomenti della riga di comando. Il parametro argc è un intero che contiene il numero di argomenti che si trovano nella riga di comando. Il suo valore è sempre almeno pari a 1 in quanto il nome del programma viene considerato come primo argomento. Il parametro argv è un puntatore a un array di puntatori a caratteri. Ogni elemento di questo array punta a un argomento della riga di comando. Esercizio 4: int main(int argc, char **argv) int i; printf("this program is %s and his number of arguments is %d.\n", argv[0], argc);

for (i = 1; i < argc; i++) printf("the argument number %d is %s.\n", i, argv[i]); Esiste anche un terzo parametro che consente di fornire al programma tutte le variabili d ambiente: envp. Esercizio 5: int main(int argc, char **argv, char **envp) char *p; while (p = *envp) printf("%s.\n", p); envp += 1; 6 Funzioni per operare sulle variabili d ambiente Dallo shell, creare la variabile d ambiente INCLUDE assegnandole il valore $HOME/include (la sottodirectory include del proprio direttorio utente): export INCLUDE=$HOME/include NOTA: questo comando funziona perché state utilizzando una shell di tipo bash. In una shell di tipo tcsh il comando sarebbe stato: setenv INCLUDE $HOME/include Ciascun programma messo in esecuzione nello shell è un processo figlio dello stesso processo shell, da cui eredita le variabili d ambiente. Un programma C può operare sulle proprie variabili d ambiente grazie ad alcune funzioni fornite dalla Standard Library: #include <stdlib.h> char *getenv(const char *name); int putenv(char *string); Esercizio 6: #include <stdlib.h>

char *path; /* ottieni e mostra il valore della variabile d ambiente INCLUDE */ path = getenv("include"); if (path!= NULL) printf("include=%s\n", path); /* imposta un nuovo valore per INCLUDE */ if (putenv("include=/usr/local/src/include")!= 0) printf("putenv() failed setting INCLUDE\n"); return -1; /* ottieni e mostra il valore della variabile d ambiente INCLUDE */ path = getenv("include"); if (path!= NULL) printf("include=%s\n", path); 7 Compressione dei file Per comprimere un file, si può utilizzare il comando: gzip <nomefile> In tal modo viene creato il file compresso <nomefile>.gz Per decomprimere un file.gz, utilizzare: gzip -d <nomefile>.gz Per comprimere N file in un unico.gz, bisogna anzitutto creare un archivio tar: tar cvf <nomearchivio>.tar <nomefile1> <nomefile2>.. <nomefilen> Notare come tar non richieda l utilizzo del carattere - per indicare le opzioni. In tal modo viene creato (opzione c ) il file <nomearchivio>.tar (opzione f <nomearchivio>.tar ), che è una concatenzione dei file originari. L opzione v indica a tar di dare un output più verboso, cioè che spieghi nel dettaglio quali operazioni sta compiendo. A questo punto si può utilizzare: gzip <nomearchivio>.tar per ottenere il file compresso <nomearchivio>.tar.gz Per comprimere un direttorio si opera come nel caso di N file, ma invece di specificare al comando tar N nomi di file si specifica il nome del direttorio target. Per ricavare i file o il direttorio originari da un.tar, si utilizza la seguente sintassi: tar xvf <nomearchivio>.tar Per spiegazioni esaustive, fare riferimento ai manuali di gzip e tar.