Newsgroup: it.comp.lang.c
Titolo: Comunicazioni con un file già aperto?!?!

Ciao a tutti quelli che leggerano queste righe...
Il mio problema è il seguente:
faccio scrivere ad un software un file e contemporaneamente con un
programmino in C devo far leggere ciò che viene scritto su questo file,
probabilmente però questo file non viene chiuso dopo la scrittura così il
mio programma quando vede fopen, mi fornisce l'errore di mancata apertura.
Siccome sto imparando il C in queste ultime settimane, non so se ho o meno
possibilità alternative.
Grazie a chi mi saprà aiutatre...
--------------------------------
Inviato via 
http://usenet.libero.it

 Grazie a chi mi saprà aiutatre...
Se puoi attendere che la scrittura del file sia terminata dal primo
programma, credo tu possa fare un ciclo in cui, per esempio, ogni 2 secondi
prova ad aprire il file, magari per max tot secondi (poi lo fai uscire con
errore),ed esce dal ciclo o quando finisce il tempo massimo che gli hai
dato o quand la fopen non da' errori.
Oppure, se il prog che genera il file lo hai scritto tu, potresti far
passare la variabile che gestisce lo stream (ehm, non mi ricordo la
definizione esatta, per esempio fp in fp=fopen(file,"r+")) tra i due
programmi. (facendo mooolta attenzione agli spostamenti che attua ognuno
dei due prog all'interno del file)
spero ti possa servire a qualcosa.
ciao,
Riccardo

 mio programma quando vede fopen, mi fornisce l'errore di mancata apertura.
un file può essere aperto da più processi contemporaneamente, anche senza 
una fclose. sei sicuro che il problema non sia un altro?
Ciao,
[Resnick]
-- 
No tv and no beer make Homer go crazy
Federico Miorelli < resnick at miorelli dot net >
http://www.miorelli.net/resnick

Ciao, grazie per l'attenzione, questo č la mia tesi di laurea e se non lo
supero difficilmente potrň concluderla.... ti spiego:
 sto usando Fluent un software commerciale per la CFD, in questo programma č
prevista la possibilitŕ di fornire come dati all'ingresso ed all'uscita del
suo campo di studio i risultati calcolati da un programmino in C che č visto
come una macro, la cosa viaggia nel tempo cioč:
a t =0 io dico a Baund(il mio prog.) la "q" e lui deve calcolarsi la "dp"
(diffrenza di pressione tra ingresso ed uscita) da fornire a Fluent che
cacola, calcola,...calcola tenendo t=0, quando finisce da un nuovo valore di
"q" che gli faccio scrivere con i settaggi di Fluent in "q-out.out",
a questo punto t= t+0.0005, il mio programmino per calcolare la nuova dp
deve leggere su q-out.out, ma non lo trova...
Se lascio la fclose non mi avvisa nemmeno di non trovarlo, se la tolgo
invece dice:
Updating solution at time level N... done.
Non si trova il file.
Error:
FLUENT received fatal signal (ACCESS_VIOLATION)
1. Note exact events leading to error.
2. Save case/data under new name.
3. Exit program and restart to continue.
4. Report error to your distributor.
Error Object: ()
Il mio programma č questo:
// Bound
// Programma che risolve la rete
 
 
	double Bound( real T, int Y)
	{
	const double R1=8E-5, R2=8E-5, R3=7.07E-6, C0=0.22E3, C1= 1.46E3, C2=1.46E3,
L1=8.25E-7,
				 L2=8.25E-7,L3=7.95E-6, AO=30., omega=3.14, M=50.;
	FILE *fd;
	char riga[80];
	int time_step, errore;
	double portata;
	const double DT = 0.0005;
	const int DS = 5;
	int i, l, n;
	double X[5], X_SOL[5], DP, DX[5], F, Q ;
	for ( i = 0; i < DS; i++ )
		{
			X[i] = 0;
			X_SOL[i] = 0;
		}
	if (T == 0)
	{
 
 
		Q = 20;
	}
	else
	{
	if((fd = fopen("c:\Programmi\FLUENT.INC\ntbin\ntx86\q-out.out", "r+"))==
NULL)
	{printf ("Non si trova il file.\n");
		errore =1;}
		fscanf(fd,"%s", riga);
		fscanf(fd,"%s", riga);
		fscanf(fd,"%s", riga);
		n= T/DT;
		for (l = 0; l <n; l++)
		fscanf(fd,"%f %f", &time_step, &portata);
		Q=portata;
	}
// fclose(fd);
		Q = portata * 998.2 * pow(10,9);
 
	   		// EULERO Esplicito
			F= M + AO * sin(2 * omega * T);
			DX[0] = (X[3]-Q)/C0;
			DX[1] = (X[4]-X[3])/C1;
			DX[2] = (Q-X[4])/C2;
			DX[3] = (X[1]-X[0]+F-R1*X[3])/L1;
			DX[4] = (X[2]-X[1]-F-R2*X[4])/L2;
				for ( i = 0; i < 5 ; i++ )
				{
					X_SOL[i] = X[i] + DT * DX[i];
				}
			for ( i = 0; i < 5; i++ )
			X[i] = X_SOL[i];
	switch ( Y ){
				case 1:
				return X[0] * 133.3224;
				break;
				case 2:
				return X[2] * 133.3224;
				break;
				}
	}
Se riesci ad aiutarmi ti sono molto grato!!!


 programmino in C devo far leggere ciò che viene scritto su questo file,
suppongo che i programmi siano indipendenti l'uno dall'altro...
cercare d'aprire un file ancora aperto da errore, è inevitabile. Non
si può accere al file...
Ci sono programmi come il notebook di Windows che aprono, leggono e
copiano il file in memoria e subito lo chiudono perciò successivamente
è possibile aprire il file, ma i dati contenuti sono già vecchi perchè
è in memoria che vengono modificati e non sul disco rigido.
dovresti entrare nella posizione di memoria dov'è stato copiato il
file e andare a fare casino da quelle parti li,
credo sia meglio aspettare l'autobus alla fermata...
bye duido