[Linux-programlama] PID dosyası olusturma ve dosya kilitleme

---------

[Linux-programlama] PID dosyası olusturma ve dosya kilitleme

From: Mehmet Gürevin <mehmetgurevin_at_gmail.com>
Date: Thu, 12 Jun 2008 06:04:43 +0300
Message-ID: <1635d1bf0806112004u5ab34584t5ea77bf4c937cb82@mail.gmail.com>

Merhabalar, umutsuzca 3 saat kivrandiktan sonra sizlere sormaya karar verdim.

Acemi bir c programcisiyim. Bir sunucu uygulamasi yaziyorum ve
sunucunun ikinci kez calismadigindan emin olmak icin bir pid dosyasi
yazip dosyayi kilitlemek istiyorum.

dosya kilitlendikten sonra bence root kullanicisi dahil kilit cozulene
kadar pid dosyasini silememeli - duzenleyememeli ve deamon surec
oldugunda kilit cekirdek tarafindan kaldirilmali.
tabi bunlar benim saf temennilerim, linux'ta isler nasil yuruyor bilmiyorum.

pid dosyasi olusturdugum kod asagida. kodu derliyorum. calistiriyorum,
pid dosyam olusuyor. baska bir terminalden digeri calisirken tekrar
calistiriyorum yine calisiyor.
ve surec henuz sonlanmadan pid dosyasini (kilitli olmasi gereken) silebiliyorum.

pid dosyasi icin deneme yaptigim kod su sekilde;

int main(void){
    int pid_fh;

    pid_fh = open("pid", O_WRONLY | O_CREAT, 0640);
    if(pid_fh){
        if(lockf(pid_fh, F_TEST, 0) < 0){
            printf("%s\n", "Sunucunun bir kopyasý zaten çalýþmakta.");
            exit(EXIT_FAILURE);
        }else{
            if(lockf(pid_fh, F_TLOCK, 0) < 0){
                printf("%s\n", "PID dosyasý kilitlenemedi.");
                close(pid_fh);
                exit(EXIT_FAILURE);
            }

            sprintf(pid_value, "%d", getpid());
            write(pid_fh, pid_value, strlen(pid_value));
        }
    }else{
        printf("%s\n", "PID dosyasý yazýlamadý.");
        exit(EXIT_FAILURE);
    }

    sleep(10);
    exit(0);
}
_______________________________________________
Linux-programlama mailing list
Linux-programlama_at_liste.linux.org.tr
http://liste.linux.org.tr/mailman/listinfo/linux-programlama
Received on Thu 12 Jun 2008 - 05:33:09 EEST

---------

Bu arsiv hypermail 2.2.0 tarafindan uretilmistir.