NAME¶
flockfile, ftrylockfile, funlockfile -
為標準輸入輸出鎖定檔案
FILE
SYNOPSIS 總覽¶
#include <stdio.h>
void flockfile(FILE *filehandle);
int ftrylockfile(FILE *filehandle);
void funlockfile(FILE *filehandle);
DESCRIPTION 描述¶
標準輸入輸出庫 stdio
函數是線程安全的。這是通過為每個檔案對象
FILE 賦予一個鎖定計數和
(當鎖定計數非零時)
一個所有者線程來實現的。對每個庫函數調用,這些函數等待直到檔案對象
FILE
不再被一個不同的線程鎖定,然後鎖定它,進行所需的
I/O
操作,再次對它解鎖。
(注意:這個鎖定與由函數
flock(2) 和
lockf(3)
實現的鎖定無關。)
所有這些操作對 C
程式員來說都是不可見的,但是有兩種理由,需要進行更加細節的控制。其一,也許某個線程需要進行不可分割的一系列
I/O
操作,不應當被其他線程的
I/O
所終端。其二,出於效率因素,應當避免進行過多的鎖定來提高效率。
為此,一個線程可以顯式地鎖定檔案對象
FILE,接著進行它的一系列
I/O
操作,然後解鎖。這樣可以避免其他線程幹擾。如果這樣做的原因是需要達到更高的效率,應當使用
stdio
函數的非鎖定版本來進行
I/O 操作:使用
getc_unlocked() 和
putc_unlocked() 來代替
getc() 和
putc()。
函數
flockfile() 等待 *
filehandle
不再被其他的線程鎖定,然後使當前線程成為
*
filehandle
的所有者,然後增加鎖定計數
lockcount。
函數
funlockfile()
減少鎖定計數。
函數
ftrylockfile() 是
flockfile()
的非鎖定版本。它在其他線程擁有
*
filehandle
時不做任何處理,否則取得所有權並增加鎖定計數。
RETURN VALUE 返回值¶
函數
ftrylockfile()
返回零,如果成功的話
(獲得了鎖定);如果失敗就返回非零。
ERRORS¶
無。
AVAILABILITY¶
這些函數當定義了
_POSIX_THREAD_SAFE_FUNCTIONS
時可用。它們存在於 libc
5.1.1 之後的 libc
版本中,以及 glibc 2.0
之後的 glibc 版本中
POSIX.1
SEE ALSO 參見¶
unlocked_stdio(3)