PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Datei temporär schreibschützen?



BravoOne
05.07.2004, 23:19
Hallo allemiteinander!

Ich habe folgendes Problem:

In meinem Javaprogramm lesen zwei Treads eine Datei aus, bearbeiten diese und schreiben die dann wieder mit Hilfe eines FileWriters. Meine Frage: Besteht die Möglichkeit eine Datei zu "locken", also dafür zu sorgen, dass die Threads nur nacheinander die Datei lesen und anschliessend schrieben können? Ich kann dies leider nicht über eine synchronised-Methode erfolgen.

Vielen Dank für eure Hilfe

BravoOne

qmasterrr
06.07.2004, 06:04
was hälst du von einer Kontroll Variabel? Bevor du schreibst liest du die und wenn der wert 0 ist setzt du ihn auf 1 und fängst an zu schreiben wenn er schon eins ist dann warteste nen augenblick und lässt den dann nochmal checken, nach dem checken setzt du die wieder auf 0 ..

tsuribito
06.07.2004, 12:09
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>

int main()
{
FILE *fp;
int c;
struct flock fl;

fl.l_type = F_WRLCK; /* Write locking on */
fl.l_whence = SEEK_SET;
fl.l_start = 0;
fl.l_len = 0;

fp = fopen("sequence", "r+");

/* Waiting for a lock */
fcntl(fileno(fp), F_SETLKW, &fl);

fscanf(fp, "%d", &c);

c++;
printf("My no.: %d\n", c);
usleep(1);
/* Writing the new number to a file */
rewind(fp);
fprintf(fp, "%d\n", c);

fl.l_type = F_UNLCK; /* Locking off */
fcntl(fileno(fp), F_SETLK, &fl);
So hat Hackin9 das gelöst. Ist zwar die falsche Sprache, kannste aber bestimmt portieren ^^

meez
06.07.2004, 14:56
Semaphore benutzen...