Avatar billede piopakk Nybegynder
02. februar 2006 - 14:55 Der er 5 kommentarer og
1 løsning

skrive, låse og åbne fil

Hej.

Jeg har en fil, kaldet share.txt, som skal tilgås af 2 processer. Hver proces skal tilgå share.txt, ved først at låse filen, skrive i den og så åbne den igen.
Når share.txt er åben igen, kan den anden proces kan gøre nøjagtig det samme. Når proces2 så er færdig, starter proces1 forfra osv.

Ovenstående, skal køre i eksempelvis 100 gange.

Det som skal skrives i filen, er informationer fra en struct, der indeholder 2 variabler (int, char).

Jeg har forsøgt at løse det med nedenstående kode, men er gået lidt i stå.

#include <unistd.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
#include <stdio.h>

int tilgaaFil()
{
    pid_t kassedame;

    FILE *logfil;
    pthread_mutex_t lf;
    kassedame = fork();
   

    //P1
    //{
        //if(PiD =...)

        logfil = fopen("./log.txt", "w"); //open file

        pthread_mutex_lock(&lf);  //LÅS fil
        if( kassedame != NULL) //parent process skriver først
        {
            printf("Jeg skriver til log.txt nu!");
            fwrite(&p, 15, sizeof(p), logfil); //skriv til fil,                                                   
            fclose(logfil);
            pthread_mutex_unlock(&lf);  //RELEASE fil
            exit(EXIT_SUCCESS);
        }
        exit(EXIT_FAILURE);


--------------
Hvad kan jeg gøre?
Avatar billede piopakk Nybegynder
02. februar 2006 - 14:56 #1
koden er selvfølgelig ik færdig..
Avatar billede arne_v Ekspert
02. februar 2006 - 15:32 #2
normalt vil fopen med w laase filen saa du enten skal aabne og lukke filen
hver gang du skal bruge den eller skal bruge specielle options

jeg kender ikke pthread_mutex_lock specielt godt, men jeg ville tro at
den kun laaste for traade inden for samme process - ikke for forskellige
processer

jeg forstaar ikke at du baade bruger pthreads og fork

bund linien : jeg tror at der skal rettes en del
Avatar billede piopakk Nybegynder
02. februar 2006 - 15:39 #3
ja tror jeg også, er ikke så meget inde i processer og tråde.

Jeg laver en child proces vha. fork(). og det skal så være de 2 processer der skal dyste om tilgangen til share.txt
Avatar billede piopakk Nybegynder
02. februar 2006 - 15:43 #4
men kan du evt. komme med et eksempel på hvordan jeg kan gøre
Avatar billede mysund Nybegynder
04. februar 2006 - 04:51 #5
Jeg kan ikke umiddelbart se udfra koden/beskrivelsen, hvad de to processer skal, men det ligner to stumper program, der afventer hinandens data. Det kunne gøre vha. pipes eller sockets, så kan de to processer også køre på to seperate maskiner.
Avatar billede piopakk Nybegynder
26. december 2009 - 18:42 #6
hm
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester