Newsgroup: it.comp.os.linux.development
Titolo: Lettura contemporanea dallo stesso file

Ho scritto un piccolo serverino che legge da un file determinati dati
e poi l'invia su socket. Ora dovrei renderlo concorrente, quindi userò
delle fork per generare dei figli all'arrivo delle richieste dai client,
ogni figlio dovrà accedere (sempre e solo in lettura) a questo file.
E' possibile fare in modo che piu' figli accedano contemporaneamente 
allo stesso file? Come si fa?
-- 
  _  _ >>Now on Linux<<  _     || ICQ number.................Non lo uso
 | \| |___ _____ ___ ___|_|___ || Home-Page ................Non ce l'ho
 | .` | -_|     | -_|_ -| |_ -||| E-Mail................Non l'avrai mai
 |_|\_|___|_|_|_|___|___|_|___||| Un Nemesis che ha pochi e-contatti ;)

allo stesso file? Come si fa?
Si: Con fork i child ereditano i file-descriptors del padre.
-- 
 __
| _         "The Internet is slow, could you please reboot it ?"
|__|iambo   mailto:
gabr...@giambonini.com
 
www.giambonini.com

 accedano contemporaneamente allo stesso file? Come si fa?
fopen, fgets, etc.
Capirei fosse in scrittura, ma se è solo lettura nessun problema

 allo stesso file? Come si fa?
aprilo dopo aver fatto la fork, cosi' il file descriptor e' locale e con esso 
anche i puntatori di lettura.
essendo solo in lettura non dovrebbero esserci complicazioni.
bye

ALoR ha scritto : 

Oh yes, farò così, grazie.


 allo stesso file? Come si fa?
I fd vengono ereditati.
La gestione della scrittura prevede
flockfile
fwrite
fflush
funlockfile
--
  Giuseppe "Cowo" Corbelli \/\ My software: 
http://cowo.mascanc.net
    **ANTI-SPAM** -- **Substitute IHATESPAM with cowo to reply by mail**
  -<! The Moment Is Now In All History, The Time Has Arrived And This Is The
  		One Place To Be. !>-
  			Savatage - This Is The Time

 
No, questo, se il file deve essere letto dall'inizio alla fine, non e` il 
caso.
Cosi` tutti i figli condividerebbero la posizione corrente del file, e ad 
ogni lettura la vedresti spostare su tutti: la cosa potrebbe avere effetti 
scgradevoli.
Ciao
Simone

effetti scgradevoli.
Appunto, ma non era quello che si voleva fare :) ?


 Appunto, ma non era quello che si voleva fare :) ?
No io voglio che ogni figlio inizi a leggere dall'inizio del file, il 
mio dubbio era se piu' figli potessero leggere dallo stesso file.
-- 
  _  _  >>Now at work<<  _     || ICQ number.................Non lo uso


 mio dubbio era se piu' figli potessero leggere dallo stesso file.
Qualunque numero di processi puo` aprire e leggere lo stesso file in 
maniera indipendente l'uno dall'altro, e` lo standard unix. E possono pure 
scriverlo, ovviamente in questo caso se non li sincronizzi avrai un 
bel po' di sovrapposizioni.
Ma nel tuo caso devi aprire il file *dopo* la fork, se no avresti i 
descrittori duplicati, e il gioco non funzionerebbe. I dettagli del perche` 
li trovi sullo Stevens, in italiano, se ti accontenti di roba molto 
preliminare e piuttosto grezza, puoi dare un'occhiata a:
http://gapil.firenze.linux.it/node46.html
, 
Ciao
Simone

il mio dubbio era se piu' figli potessero leggere dallo stesso file.
Oddio, non vedo il problema ...


 Oddio, non vedo il problema ...
Infatti non e` un problema. Lo e` solo se fai leggere a tutti lo stesso 
file aperto prima della fork.
Ciao
Simone

altri.                                                                 
Uh,  quindi mi  dici che  i figli  non ereditano  una copia  del fd,
bensi'  tutti accedono  al medesimo  fd ?  Te lo  chiedo perche'  e'
passato  tanto  tempo dalla  lettura  di  "The  design of  the  UNIX
Operating System" di  Bach, e la mia memoria ridotta  ha dovuto fare
spazio per altre nozioni :)
+++
Spremendomi le  meningi, mi pare  di ricordare che sia  proprio come
dici tu ... Dovrei rispolverare il mitico Bach :-) ...


 spazio per altre nozioni :)
Mai letto (ma ne ho sentito parlare molto bene), le informazioni le trovi 
anche sia sullo Stevens (APUE) che dal manuale delle glibc.
Ciao
Simone