qualche domanda su un progr in c....

Discuti dei problemi relativi alla programmazione nel tuo linguaggio preferito!

Moderatori: cb_123, thrantir, tonertemplum

qualche domanda su un progr in c....

Messaggiodi buz87 il 11 gen 2010, 02:44

ciao a tutti, vorrei farvi qualche domanda....
sto facendo un server concorrente, dove ogni figlio, quando generato, offre alcuni servizi ad un client. i figli devono leggere da un file di testo e la fopen è chiamata a fork avvenuta, quindi "dentro" ai figli, volevo sapere visto che i file descriptor creati saranno diversi e il file è aperto solo in lettura, non dovrebbe dare problemi l'accesso contemporaneo al file da parte di più processi vero?(il file da cui devono leggere i figli è unico per tutti...)
seconda domanda: sto server deve girare anche su un sistema solaris e volevo sapere se devo fare attenzione a qualcosa in particolare...il protocollo con cui comunica il server col client è testuale (quindi il fatto che sia little endian non influisce) basato sul carattere '\r' come terminatore di riga, quando apro un file su solaris [ fopen(file, "r") ] me lo riconosce esattamente come su linux o i caratteri vengono letti diversamente e quindi magari devo aprirlo in binario? perchè so di un problema riscontrato dove non venivano trovati i caratteri '\r' ......

grazie per l'aiuto!!!
- E6600 @ 3400Mhz - 2x1gb geil 6400 / 800Mhz 4-4-4-12 - asus p5k-e wifi - nvidia7900gs - westerndigital 320gb sata - ali lc green power 550W - :nemo: liquidcooled by ybris k11 - . :lin: case costruito da me :lin: *work in progress* :ok:
Avatar utente
buz87
Saggio del pianeta
Saggio del pianeta
 
Messaggi: 373
Iscritto il: 29 mag 2006, 23:26

 

Re: qualche domanda su un progr in c....

Messaggiodi buz87 il 11 gen 2010, 17:11

altra domanda...
creo una matrice int matrix[65535][10], poi devo riempire tale matrice con una funzione riempimatrice e quindi chiamo riempimatrice(..., matrix, );
il prototipo è: int riempimatrice(..., int **matrix, ...)
però mi da errore tipo incompatibile... come faccio a passare alla funzione l'indirizzo della matrice????
- E6600 @ 3400Mhz - 2x1gb geil 6400 / 800Mhz 4-4-4-12 - asus p5k-e wifi - nvidia7900gs - westerndigital 320gb sata - ali lc green power 550W - :nemo: liquidcooled by ybris k11 - . :lin: case costruito da me :lin: *work in progress* :ok:
Avatar utente
buz87
Saggio del pianeta
Saggio del pianeta
 
Messaggi: 373
Iscritto il: 29 mag 2006, 23:26

Re: qualche domanda su un progr in c....

Messaggiodi thrantir il 12 gen 2010, 19:17

per il file nessun problema, piu' processi possono aprire lo stesso file in lettura, il contenuto del file immagino non cambi mai durante l'esecuzione

per il discorso della matrice ti rispondo poi, che ora devo scappare, intanto ti dico che int[][] e int** non sono la stessa cosa
Fletto i muscoli e sono nel vuoto
Principi di architettura degli eleboratori
X postare immagini
-----BEGIN GEEK CODE BLOCK-----
GCS/IT/L/MU d- s: a C++$>+++ UL+>++ P L+++>++++ E--- W++ N++>+++ o+>++ K? w O-- M- VMS? V- PS++ Y+ PGP+ t 5? X+ R++>+++ tv+ b+++>++++ DI+++ D++ G e++ h- r++ y++
------END GEEK CODE BLOCK------
Addio Dani, sono più ricco perchè ti ho conosciuto
Avatar utente
thrantir
Moderatore
Moderatore
 
Messaggi: 8897
Iscritto il: 27 mag 2003, 13:32
Località: Pisa

Re: qualche domanda su un progr in c....

Messaggiodi buz87 il 13 gen 2010, 01:02

alla fine ho deciso che non faccio più leggere da file, quando il server si avvia carico tutto in un database...
e per la matrice ho risolo creandomi un vettore di puntatori che poi popolo dinamicamente.. però se puoi darmi una spiegazione sul perchè definito int matrix[][] allora non vale la relazione matrix = int** te ne sarei grato, ne ero quasi certo... :oops:
anche perchè int[] = int* .....
e per come la so io quando si dichiara matrix[a][b] vengono allocate 'a' porzioni di memoria contigue, suddivise in 'b' "pezzetti", quindi in matrix[a] dovrebbe esserci l'indirizzo della prima cella del blocco a, quindi matrix è un puntatore a puntatore.....bha aspetto che spieghi e smetto di farmi tutte ste seghe mentali.... ](*,)
- E6600 @ 3400Mhz - 2x1gb geil 6400 / 800Mhz 4-4-4-12 - asus p5k-e wifi - nvidia7900gs - westerndigital 320gb sata - ali lc green power 550W - :nemo: liquidcooled by ybris k11 - . :lin: case costruito da me :lin: *work in progress* :ok:
Avatar utente
buz87
Saggio del pianeta
Saggio del pianeta
 
Messaggi: 373
Iscritto il: 29 mag 2006, 23:26

Re: qualche domanda su un progr in c....

Messaggiodi buz87 il 13 gen 2010, 02:04

ora sto cercando un modo per mettere un timer ad alcune funzioni, mi spiego:
ho una funzione function() richiamata nel main, voglio che tale funzione non duri più di x secondi e a seconda del valore di ritorno devo capire se essa è terminata a causa del timer o perchè è terminata e basta.
avevo pensato una cosa del genere:

Codice: Seleziona tutto
function(...........){
   alarm(x);
    :
    :
  return m;
}


di default il segnale SIGALRM termina l'applicazione invocante,qui la mia damanda: è possibile creare un handler che fa terminare solo la function() e la faccia terminare con un valore a mia scelta?(mi basta che termini con un valore minore di zero....)
- E6600 @ 3400Mhz - 2x1gb geil 6400 / 800Mhz 4-4-4-12 - asus p5k-e wifi - nvidia7900gs - westerndigital 320gb sata - ali lc green power 550W - :nemo: liquidcooled by ybris k11 - . :lin: case costruito da me :lin: *work in progress* :ok:
Avatar utente
buz87
Saggio del pianeta
Saggio del pianeta
 
Messaggi: 373
Iscritto il: 29 mag 2006, 23:26

Re: qualche domanda su un progr in c....

Messaggiodi thrantir il 14 gen 2010, 14:11

buz87 ha scritto:e per la matrice ho risolo creandomi un vettore di puntatori che poi popolo dinamicamente.. però se puoi darmi una spiegazione sul perchè definito int matrix[][] allora non vale la relazione matrix = int** te ne sarei grato, ne ero quasi certo... :oops:
anche perchè int[] = int* .....
e per come la so io quando si dichiara matrix[a][b] vengono allocate 'a' porzioni di memoria contigue, suddivise in 'b' "pezzetti", quindi in matrix[a] dovrebbe esserci l'indirizzo della prima cella del blocco a, quindi matrix è un puntatore a puntatore.....bha aspetto che spieghi e smetto di farmi tutte ste seghe mentali.... ](*,)


e' vero che la matrice

int my_matrix[a][b]

e' istanziata come a vettori di b elementi contigui, e proprio per questo non equivale a un int**! infatti, int** significa avere un puntatore che punta ad una cella che a sua volta e' un puntatore a intero, e' una cosa totalmente diversa!

my_matrix in memoria e' una cosa del tipo

my_matrix -> |_|_|....|_|

mentre int** my_ptr_to_ptr e'

my_ptr_ptr -> |_| -> |_|

non so se e' chiaro il simbolismo grafico

puoi trattare una matrice come un array di dimensione a * b, e, se hai int* my_head = my_matrix, sai che

my_matrix[i][j] = my_head + b*i + j
Fletto i muscoli e sono nel vuoto
Principi di architettura degli eleboratori
X postare immagini
-----BEGIN GEEK CODE BLOCK-----
GCS/IT/L/MU d- s: a C++$>+++ UL+>++ P L+++>++++ E--- W++ N++>+++ o+>++ K? w O-- M- VMS? V- PS++ Y+ PGP+ t 5? X+ R++>+++ tv+ b+++>++++ DI+++ D++ G e++ h- r++ y++
------END GEEK CODE BLOCK------
Addio Dani, sono più ricco perchè ti ho conosciuto
Avatar utente
thrantir
Moderatore
Moderatore
 
Messaggi: 8897
Iscritto il: 27 mag 2003, 13:32
Località: Pisa

Re: qualche domanda su un progr in c....

Messaggiodi thrantir il 14 gen 2010, 16:04

per il discorso del timer, ma tu uvoi che dopo esattamente x secondi la funzione termini comunque? considera che se stai eseguendo una chiamata bloccante, non puoi uscire a meno di azioni drastiche. Sicuramente devi controllare il tempo trascorso dopo ogni chiamata... puoi specificare meglio cosa vuoi realizzare?
Fletto i muscoli e sono nel vuoto
Principi di architettura degli eleboratori
X postare immagini
-----BEGIN GEEK CODE BLOCK-----
GCS/IT/L/MU d- s: a C++$>+++ UL+>++ P L+++>++++ E--- W++ N++>+++ o+>++ K? w O-- M- VMS? V- PS++ Y+ PGP+ t 5? X+ R++>+++ tv+ b+++>++++ DI+++ D++ G e++ h- r++ y++
------END GEEK CODE BLOCK------
Addio Dani, sono più ricco perchè ti ho conosciuto
Avatar utente
thrantir
Moderatore
Moderatore
 
Messaggi: 8897
Iscritto il: 27 mag 2003, 13:32
Località: Pisa

Re: qualche domanda su un progr in c....

Messaggiodi buz87 il 14 gen 2010, 18:34

per il discorso sulla matrice in effetti hai ragione... non so perchè mi ero convinto che con matrix[a+2] si indicasse un puntatore alla serie di b celle partenti dall'indirizzo matrix+2*(a+2)..... capito grazie......

per il timer ho risolto usando alarm() e nell'handler dell'alarm modifico una variabile che testo nella funzione, quando questa cambia termino la funzione......
- E6600 @ 3400Mhz - 2x1gb geil 6400 / 800Mhz 4-4-4-12 - asus p5k-e wifi - nvidia7900gs - westerndigital 320gb sata - ali lc green power 550W - :nemo: liquidcooled by ybris k11 - . :lin: case costruito da me :lin: *work in progress* :ok:
Avatar utente
buz87
Saggio del pianeta
Saggio del pianeta
 
Messaggi: 373
Iscritto il: 29 mag 2006, 23:26

Re: qualche domanda su un progr in c....

Messaggiodi thrantir il 14 gen 2010, 21:36

ok

l'unico problema e' appunto se fai delle chiamate bloccanti, tipo recv o read
Fletto i muscoli e sono nel vuoto
Principi di architettura degli eleboratori
X postare immagini
-----BEGIN GEEK CODE BLOCK-----
GCS/IT/L/MU d- s: a C++$>+++ UL+>++ P L+++>++++ E--- W++ N++>+++ o+>++ K? w O-- M- VMS? V- PS++ Y+ PGP+ t 5? X+ R++>+++ tv+ b+++>++++ DI+++ D++ G e++ h- r++ y++
------END GEEK CODE BLOCK------
Addio Dani, sono più ricco perchè ti ho conosciuto
Avatar utente
thrantir
Moderatore
Moderatore
 
Messaggi: 8897
Iscritto il: 27 mag 2003, 13:32
Località: Pisa

Re: qualche domanda su un progr in c....

Messaggiodi buz87 il 19 gen 2010, 18:12

infatti per mettere un timer alla read uso la select().......
- E6600 @ 3400Mhz - 2x1gb geil 6400 / 800Mhz 4-4-4-12 - asus p5k-e wifi - nvidia7900gs - westerndigital 320gb sata - ali lc green power 550W - :nemo: liquidcooled by ybris k11 - . :lin: case costruito da me :lin: *work in progress* :ok:
Avatar utente
buz87
Saggio del pianeta
Saggio del pianeta
 
Messaggi: 373
Iscritto il: 29 mag 2006, 23:26

Re: qualche domanda su un progr in c....

Messaggiodi thrantir il 20 gen 2010, 09:44

ok

su quale piattaforma sviluppi? sotto linux le recenti release delle libc ti consentono di rendere non bloccanti alcune chiamate, come read e recv, dai un'occhiata ai man
Fletto i muscoli e sono nel vuoto
Principi di architettura degli eleboratori
X postare immagini
-----BEGIN GEEK CODE BLOCK-----
GCS/IT/L/MU d- s: a C++$>+++ UL+>++ P L+++>++++ E--- W++ N++>+++ o+>++ K? w O-- M- VMS? V- PS++ Y+ PGP+ t 5? X+ R++>+++ tv+ b+++>++++ DI+++ D++ G e++ h- r++ y++
------END GEEK CODE BLOCK------
Addio Dani, sono più ricco perchè ti ho conosciuto
Avatar utente
thrantir
Moderatore
Moderatore
 
Messaggi: 8897
Iscritto il: 27 mag 2003, 13:32
Località: Pisa

Re: qualche domanda su un progr in c....

Messaggiodi buz87 il 01 feb 2010, 19:55

ok grazie 1000!!!!
- E6600 @ 3400Mhz - 2x1gb geil 6400 / 800Mhz 4-4-4-12 - asus p5k-e wifi - nvidia7900gs - westerndigital 320gb sata - ali lc green power 550W - :nemo: liquidcooled by ybris k11 - . :lin: case costruito da me :lin: *work in progress* :ok:
Avatar utente
buz87
Saggio del pianeta
Saggio del pianeta
 
Messaggi: 373
Iscritto il: 29 mag 2006, 23:26

 

Torna a Programmare

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite

cron