LOCKFILE(3)

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 版本中

CONFORMING TO 標準參考
POSIX.1

SEE ALSO 參見
unlocked_stdio(3)

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