Arch manual pages

LOCKFILE(3) Linux Programmer's Manual LOCKFILE(3)

flockfile, ftrylockfile, funlockfile - 爲標準輸入輸出鎖定文件 FILE

#include <stdio.h>

void flockfile(FILE *filehandle);

int ftrylockfile(FILE *filehandle);
void funlockfile(FILE *filehandle);

標準輸入輸出庫 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 時不做任何處理,否則取得所有權並增加鎖定計數。

函數 ftrylockfile() 返回零,如果成功的話 (獲得了鎖定);如果失敗就返回非零。

無。

這些函數當定義了 _POSIX_THREAD_SAFE_FUNCTIONS 時可用。它們存在於 libc 5.1.1 之後的 libc 版本中,以及 glibc 2.0 之後的 glibc 版本中

POSIX.1

unlocked_stdio(3)

本頁面中文版由中文 man 手冊頁計劃提供。
中文 man 手冊頁計劃:https://github.com/man-pages-zh/manpages-zh
2001-10-18