1 Esercitazione sui segnali Problema: creare un programma analizzatore di file testuali che prenda come argomenti il nome di un file e una sequenza di.

Slides:



Advertisements
Presentazioni simili
File Linguaggio C.
Advertisements

Puntatori Linguaggio C.
CUDA & OpenMP parallel programming.
INFORMATICA Altre Istruzioni di I/O
PROCESS MANAGEMENT: STRUTTURE DATI
Esercitazioni If nidificati
Uso avanzato di C.
SC che operano su processi
Sequential Statements. – Il VHDL simula lo svolgersi in parallelo di varie operazioni – Loggetto fondamentale e il PROCESS – Un PROCESS contiene una serie.
I segnali.
SC che operano su file (1)
Argomenti dalla linea dei comandi Gli argomenti possono essere passati a qualsiasi funzione di un programma, compresa la main(), direttamente dalla linea.
Tail recursion: esempio
Esempio: Tombola! Parte seconda.
J0 1 Marco Ronchetti Java Threads & Sincronizzazione.
Richiami di Java Multithreading. Threads (subclassing) public class A { public void a_method { C t = new C(); //C t = new C(String name); t.start(); …
prompt> java SumAverage
Costruzione di Interfacce Lezione 10 Dal Java al C++ parte 1
Laboratorio di Linguaggi lezione XI: I/O Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea.
JAVA C import java.util.*; #include <stdio.h>
Threads: Sistemi Operativi I Corso di Laurea in Ingegneria Informatica
I Thread.
1 Implementazione di Linguaggi 2 PARTE 6 Implementazione di Linguaggi 2 PARTE 6 Massimo Ancona DISI Università di Genova Testo: A.V. Aho, R. Sethi, J.D.Ullman.
Gestione File System e I/O in Windows 2000 Implementazione del File System FAT-12, FAT-16, FAT-32 NTFS API relative al File System Gestione dei dispositivi.
Esercizio: Copiare un file in un nuovo file mediante le funzioni read e write.
A.A. 2010/2011Ambienti di Programmazione per il Software di Base1 (Es. – 6) Ambienti di Programmazione per il Software di Base Le Stringhe in C Input.
1 LINUX: struttura generale The layers of a UNIX system. User Interface.
Le liste dinamiche La ricorsione
Sistemi Operativi - Introduzione 1 Il sistema operativo UNIX Shell: uso avanzato e script Niccolò Battezzati Politecnico di Torino Dip. Automatica e Informatica.
AN Fondam98 Input Output Input Output I files standard di I/O.
Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria.
University of Pisa Computer Science Department System Administration Processi, task periodici, stampa Stefano Bistarelli University of Pisa Computer Science.
Piero Scotto - C141 C14 #14 Puntatori e file. Il problema dellordinamento. Debug.
Fondamenti di Informatica Corsi di Laurea in Ingegneria Gestionale Canale AL ESERCITAZIONE 4 ARGOMENTI: STRINGHE DI CARATTERI.
(1) Sistemi Operativi Prof. P. Cattaneo ufficio: L Ricevimento: Martedì14.00 –
void binario(int n); …………………
24 aprile 2002 Avvisi: Risultati 1 o Esonero: (entro) lunedi 27 disponibili nella pag. WEB, ma anche esposti nella bacheca fuori dal corridoio 2 o dente,
Creazione progetto in C++/DEV
Massimo Comun Divisore
Soluzioni 1.Struttura base soluzione 2.Lettura dei tasti 3.Identificazione dei tasti 4.Accensione dei LED 5.Rotazione dei LED 6.Rotazione dei tasti fino.
Funzioni stringhe. chr Restituisce il carattere di un valore ascii dato. Per vedere lelenco dei codici ascii clicca QQQQ uuuu iiiiEsempio
Esercizi su File.
Esercizi su File e Liste
Gestione dei file di testo, matrici e struct
2000 Prentice Hall, Inc. All rights reserved. I file Apertura e chiusura I file ad accesso sequenziale I file ad accesso casuale Apre un file già esistente.
Introduzione al linguaggio C. Cos’e’ il C? Il C e’ un linguaggio ad alto livello Un compilatore C prende in input un file contenente codice sorgente C.
1 I segnali. 2 Prima un po’ di teoria…... 3 Stati dei processi in UNIX Idle Sleeping Zombified Runnable Running Fork iniziata waitpid Fork terminata.
T. MottaGenerazione e terminazione processi1 Creazione e terminazione dei processi Tommaso Motta
#include void main() { int a,b,c,; float s, x,x1,x2,delta,alfa,beta; int num[3]; int i; printf("La forma classica dell'equazione di 2° grado è: a*x^2+b*x+c=0\n.
1 SC che operano su processi Getpid, fork, exec, wait, waitpid, exit, dup, dup2.
Fabio Scotti – Università degli Studi – Laboratorio di programmazione per la sicurezza 1 Lezione 13 e 14 GESTIONE DEI FILE A) Nozioni sulla gestione dei.
Gestione dei segnali I segnali sono interrupt software.I segnali –interrompono i processi qualunque cosa stiano essi facendo al momento della generazione.
I segnali.
1.1 Il concetto di processo Un sistema operativo può eseguire una grande varietà di attività diverse:  sistemi batch – jobs;  sistemi time-shared – programmi.
Ingegneria del software Modulo 1 - Introduzione al processo software Unità didattica 5 -Test e verifica Ernesto Damiani Università degli Studi di Milano.
1 System Call che operano su processi Getpid, fork, exec, wait, waitpid, exit, dup, dup2.
Programmazione e Laboratorio di Programmazione
LINUX: struttura generale
comprensione e modifica di codice
comprensione e modifica di codice
APPUNTI SUL LINGUAGGIO C Simulazione Prima Prova Intermedia
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Transcript della presentazione:

1 Esercitazione sui segnali Problema: creare un programma analizzatore di file testuali che prenda come argomenti il nome di un file e una sequenza di stringhe. Per ognuna delle stringhe deve venire generato un thread che conta il numero di occorrenze della stringa allinterno del file. Predisporre una serie di segnali (o messaggi-evento) per effettuare almeno le seguenti operazioni: Sospensione regolare dellanalisi: se viene ricevuto un segnale di sospensione lanalizzatore stampa su un file la situazione provvisoria dellanalisi oltre allinformazione che il processo e attualmente sospeso. Terminazione regolare dellanalisi: se viene ricevuto un segnale di terminazione il processo stampa su un file la situazione dellanalisi al ricevimento del segnale, oltre allinformazione che il processo e terminato prima del dovuto.

2 void output_result (); void output_final_result (int complete); void output_partial_result(); void suspend(); void terminate (); void lower_priority (); void * VerifyFile(void * info); int main (int argc, char *argv[]) { /* Dichiarazione di variabili */ signal (SIGTERM, terminate); signal (SIGINT, terminate); signal (SIGTSTP, suspend); signal (SIGHUP, terminate); signal (SIGUSR1, output_partial_result); signal (SIGXCPU, lower_priority); /* codice */ } Struttura generale del codice Unix

3 Codice del main() if (argc < 3) { printf("Usage: analyzer file first_string [other_strings...]\n"); exit(-1); } active_threads = malloc (sizeof(pthread_t) * (argc - 2)); partial_results = malloc (sizeof(int) * (argc - 2)); file_to_check = argv[1]; number_strings_to_check = argc - 2; strings_to_check = &argv[2]; for (i=0; i<number_strings_to_check; i++) { thread_info = malloc (sizeof(struct _thread_info)); thread_info->position = i; thread_info->string = argv[i+2]; j=pthread_create(&active_threads[i], NULL, VerifyFile, (void *)thread_info); if (j) { printf("cannot create thread for error %d\n", j); exit(-1); } for (i=0; i<(argc-2); i++) pthread_join(active_threads[i], &status); output_final_result(1); exit(0);

4 Codice del VerifyFile() - I void * VerifyFile(void * info) { int fd; int i,j; char buffer[2*READ_BUFFER]; struct _thread_info * thread_info; int string_length = 0; thread_info = (struct _thread_info *) info; fd = open(file_to_check, O_RDONLY); //printf("Ordering thread active\n"); // if (fd < 0) { printf("Can't open file %s\n",file_to_check); partial_results[thread_info->position] = -1; status = -1; pthread_exit((void *)&status); } string_length = strlen (thread_info->string); if (string_length > READ_BUFFER) { printf("String %s too long\n",thread_info->string); partial_results[thread_info->position] = -1; status = -1; pthread_exit((void *)&status); }

5 Codice del VerifyFile() - II i = READ_BUFFER; j = read(fd, &buffer[READ_BUFFER], READ_BUFFER); while (j != 0) { for (; i<((READ_BUFFER + j) - string_length + 1); i++) { if (strncmp(thread_info->string, &buffer[i], string_length) == 0) { partial_results[thread_info->position]++; i = i + string_length - 1; } memcpy(&buffer[READ_BUFFER - string_length + 1], &buffer[(READ_BUFFER + j) - string_length + 1], (READ_BUFFER + j) - i); i = READ_BUFFER - string_length + 1; j = read(fd, &buffer[READ_BUFFER], READ_BUFFER); } status = 0; pthread_exit((void *)&status); }

6 Codice dei segnali semplici void suspend() { output_partial_result(); kill(getpid(), SIGSTOP); return; } void terminate () { output_final_result(0); exit(0); } void lower_priority () { nice(10); return; }

7 Codice di stampa risultati void output_final_result (int complete) { output_file = fopen(dump_file, "w"); if (output_file == NULL) { printf("Cannot open dump file!\n"); exit(-1); } if (complete) fprintf(output_file, "Analysis complete\nOccurrences:\n"); else fprintf(output_file, "Analysis Interrupted\nAt the interruption time I found the following occurrences:\n"); output_result(); fclose(output_file); return; } void output_partial_result() { output_file = fopen(dump_file, "w"); if (output_file == NULL) { printf("Cannot open dump file!\n"); exit(-1); } fprintf(output_file, "Analysis still ongoing\nAt this time I already found the following occurrences:\n"); output_result(); fclose(output_file); return; }