Datei temporär schreibschützen?

B

BravoOne

Grünschnabel
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
 
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 ..
 
Code:
#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 ^^
 

Ähnliche Themen

Keine grafische Oberfläche (Debian Installation)

Benötige Hilfe- Dateien vergleichen

ca. 1200 PDF-Dateien auslesen und bestimmte Daten in eine CSV-Datei speichern

CentOS VM boot verändern und Netzwerksettings von Share laden

Advanced Verzeichnis und Datei Berechtigung

Zurück
Oben