2012-07-21 126 views
4

我想從txt文件中讀取數據並在其中附加下一個數字,我也想使用fork來作爲第二個進程。在下面的代碼中,我需要幫助來解鎖文件。我無法解鎖文件。如何使用lockf()解鎖?

int main() { 
    int x; 
    pid_t child = fork(); 
    FILE *file; 
    //flock(fileno(file),LOCK_EX); 
    file = fopen ("list.txt", "r"); 
    //printf("file is locked"); 
    int fdSource = (int)file; 
    if (fdSource > 0){ 
    if (lockf(fdSource, F_LOCK, 0) == -1) 
     x = readValue(file); 
     return 0; /* FAILURE */ 
    } 
    else { 
     return 1; 
    } 
    if (lockf(fdSource, F_ULOCK, 0) == -1){ 
     printf("file is not lock"); 
     appendValue(x); 
    } 
    else { 
     return 1; 
    } 
    appendValue(x); 
} 
+3

'INT fdSource =(int)的文件;'是不正確的。看看'fileno(3)'的手冊頁。 – Mat 2012-07-21 16:45:05

+0

謝謝,但如果之前不使用(int)我得到錯誤,並建議投它 – user1542921 2012-07-21 16:49:34

+1

鑄造刪除警告是在C的99.999999%的情況下的一個大錯誤。使用我上面提到的功能得到一個文件描述符來自'FILE *'。 – Mat 2012-07-21 16:50:59

回答

3

更換int fdSource = (int)file;與此:

int fd = fileno(file); 

另外,如果你是在Unix,你想flock,不lockf。要鎖定,這樣做:

flock(fd, LOCK_EX); 

而解鎖:

flock(fd, LOCK_UN); 
+0

'lockf()'也是一個有效的Unix上的鎖定函數,就像'fcntl()'一樣。我同意標題問'flock()',但代碼使用'lockf()',所以我已經使問題的標題與代碼相匹配(比使代碼與標題匹配更簡單)。 – 2012-07-21 18:01:43

+0

非常感謝,它的工作! – user1542921 2012-07-22 03:57:30

+0

我需要從一個進程讀取並通過其他進程追加。但是在我的代碼中fork是創建兩個進程,它讀取兩個時間並將兩個文件附加到文件,例如,它將文件添加到文件,然後第二個進程將4 5 6添加到txt文件。 – user1542921 2012-07-22 04:04:51