Appunti per Scuola e Università
humanisticheUmanistiche
Appunti e tesine di tutte le materie per gli studenti delle scuole medie riguardanti le materie umanistiche: dall'italiano alla storia riguardanti le materie umanistiche: dall'italiano alla storia 
sceintificheScientifiche
Appunti, analisi, compresione per le scuole medie suddivisi per materie scientifiche, per ognuna troverai appunti, dispense, esercitazioni, tesi e riassunti in download.
tecnicheTecniche
Gli appunti, le tesine e riassunti di tecnica amministrativa, ingegneria tecnico, costruzione. Tutti gli appunti di AppuntiMania.com gratis!
Appunti
informatica
CComputerDatabaseInternetJava
Linux unixReti


AppuntiMania.com » Informatica » Appunti di c » Impiego di file

Impiego di file




Visite: 1172Gradito:apreciate 4-stela [ Picolo appunti ]
Leggi anche appunti:

Complemento a uno


Complemento a uno L'operatore di complemento a uno è rappresentato con la tilde

Problemi di cooperazione nel modello a scambio di messaggi


Problemi di cooperazione nel modello a scambio di messaggi VIII) Scrivere

La gestione degli errori


La gestione degli errori Le librerie della maggior parte dei compilatori implementano
immagine di categoria

Scarica gratis Impiego di file

Impiego di file


XIII) Si realizzino due processi che interagiscono tramite memoria comune al fine di leggere dati da un disco. Il primo legge da disco blocchi di dati e li deposita in un insieme di buffer allocati in memoria comune. Il secondo processo stampa a video tutto ciò che trova in tali buffer.


Descrizione: Il programma presentato è un tipico esempio di cooperazione tra processi  pertanto si è scelto di realizzarlo facendo riferimento al problema Produttori/Consumatori, con uso di un buffer multiplo di memoria comune, e facendo sincronizzare i due processi mediante scambio di messaggi. In pratica, il processo che legge i dati dal disco per poi depositarli nel buffer di memoria condivisa funge da produttore, mentre il processo che legge i dati dal buffer e li stampa a video funge da consumatore. I due processi interagiscono come segue:

Il produttore legge un blocco dati alla volta dal file finquando non ne viene raggiunta la fine.

Ad ogni lettura, il produttore deposita il blocco dati nel buffer di memoria comune, invia al consumatore una messaggio di SENT (Send Asincrona) con cui lo informa che un blocco dati è disponibile e si mette in attesa di un ACK da parte del consumatore (fondamentale perchè alla prossima lettura il contenuto del buffer sarà sovrascritto e finchè il consumatore non ha ricevuto il blocco dati corrente nessun'altra lettura è possibile).

Il consumatore è perennemente in attesa (Receive Bloccante) che un blocco dati sia disponibile, quando lo riceve ne stampa il contenuto a video e dopo invia l'ACK al produttore.

Quando il produttore è giunto (in lettura) alla fine del file, comunica al consumatore questa circostanza, il consumatore stampa a video un messaggio che segnala la fine delle operazioni ed entrambi terminano.


 Programma XIII.C


#include <sys/types.h> 

#include <stdio.h>         

#include <sys/ipc.h>

#include <sys/msg.h>

#include <sys/wait.h>

#include <fcntl.h>


#define DIM 256                      //Dimensione del Buffer condiviso

#define DIM_MSG (sizeof(unsigned int))                //Cardinalità del Messaggio

#define SENT 0                                    //Tipi del Messaggio

#define ACK 1


typedef struct Messaggio;


void main()


//----- ALLOCAZIONE BUFFER DI MEMORIA CONDIVISA -----


key_t Key_Buf=IPC_PRIVATE; //Chiave del buffer

int ID_Buf; //Identificatore del buffer

char* Ptr_Buf; //Puntatore al buffer


ID_Buf=shmget(Key_Buf, DIM, IPC_CREAT|0664); //Viene allocato un segmento di memoria di dimensione almeno

//pari DIM, gli viene associato un ID e viene creata una

//struttura dati ausiliaria che consenta di gestirlo

//RW per User, RW per Gruppo, R only per Others

if (ID_Buf==-1)


Ptr_Buf=shmat(ID_Buf, 0, 0); //Il segmento allocato viene annesso al segmento dati

//del processo al primo indirizzo disponibile così come

//specificato dal sistema

if (Ptr_Buf==(char*)-1)


//----- GENERAZIONE DEL FIGLIO PRODUTTORE -----


pid=fork(); //Generazione del figlio Produttore

if (pid==-1) else if (!pid)


do


if (N_Byte>=0)


//Rimane in attesa di un messaggio dal Consumatore


msgrcv(ID_Msg, (const void*)&msg, DIM_MSG, ACK, 0);


} while(N_Byte==DIM-1); //in caso contrario, con l'ultimo

//trasferimento si è raggiunto l'EOF


close(fd); //Chiusura del file


exit(0); //Il figlio Produttore termina correttamente

}


//----- GENERAZIONE DEL FIGLIO CONSUMATORE -----


pid=fork(); //Generazione del figlio Consumatore

if (pid==-1) else if (!pid) else

}

}


exit(0); //Il figlio Consumatore termina correttamente

}


//----- SINCRONIZZAZIONE DEL PADRE CON I FIGLI -----


for(i=0; i<2; i++)


//----- RILASCIO BUFFER E CODA DI MESSAGGI -----


shmctl(ID_Buf, IPC_RMID, 0);


msgctl(ID_Msg, IPC_RMID, 0);





Scarica gratis Impiego di file
Appunti su: produttore consumatore con file in php,



Scarica 100% gratis e , tesine, riassunti



Registrati ora

Password dimenticata?
  • Appunti superiori
  • In questa sezione troverai sunti esame, dispense, appunti universitari, esercitazioni e tesi, suddivisi per le principali facoltà.
  • Università
  • Appunti, dispense, esercitazioni, riassunti direttamente dalla tua aula Universitaria
  • all'Informatica
  • Introduzione all'Informatica, Information and Comunication Tecnology, componenti del computer, software, hardware ...