關於fsync的問題及學習

2021-06-20 06:05:39 字數 1224 閱讀 9704

1. 問題:

因為需要寫乙個非常重要的檔案,需要避免因系統突然斷電造成的檔案內容丟失問題的發生。

而在呼叫了fopen/fwrite以及sync之後,會導致系統執行過程中使用者操作卡一下。

原因是sync會將buffer中所有已修改資料寫入磁碟中,

如果資料量大比如會影響到系統效能。

所以考慮使用fsync來sync這乙個檔案。

2. 問題:

使用fsync就必須先獲取檔案描述符,這樣才能sync指定的檔案。

而**中基本上都是使用的fopen/fwrite/fclose這些c library函式,

這樣函式操作的是檔案指標。

所以不知道如何拿到檔案描述符?

如果要改用open/write等系統呼叫的話,就會需要改很多**,很麻煩。

怎麼辦呢?

還好有這樣乙個函式,它能根據輸入的檔案指標引數來獲取該檔案的檔案描述符,

使得問題迎刃而解。

#include

int fileno(file *stream);

以下是常用的檔案操作類c library函式:

#include

file *fopen(const char *path, const char *mode);

size_t fread(void *ptr, size_t size, size_t nmemb, file *stream);

size_t fwrite(const void *ptr, size_t size, size_t nmemb, file *stream);

int fclose(file *fp);

以下是檔案操作類的系統呼叫函式:

#include

#include

#include

int open(const char *pathname, int flags, mode_t mode);

#include

ssize_t read(int fd, void *buf, size_t count);

ssize_t write(int fd, const char *buf, size_t count);

int close(int fd);

int fsync(int fd);

int fdatasync(int fd);

關於這些庫函式和系統呼叫的詳細資訊,此時就不多做介紹了;

如果有需要,檢視使用者手冊即可。

LINQ學習中關於null相關的問題及解決方案

來自 加以更新 null詞語釋義 程式設計中的null表示不可用的資料,沒有意義.1.無效的 無價值的 2.數 零的 null在資料庫中表示 不知道 unknown 的資料,主要有3種意思 1 知道資料存在,但不知道具體值 2 不知道資料是否存在 3 資料不存在 null在資料庫中的說明可以參考這篇...

關於機器學習的問題

svm只考慮分類面附近的點,即支援向量,所以對離群點不敏感 lr考慮所有樣本點,所以對離群點敏感。梯度提公升決策樹gbdt是一種基於整合思想的決策樹模型,即每顆樹學的是之前所有樹結論之和的殘差,這個殘差就是乙個加 值後能得真實值的累加量,將每次 出的結果與目標值的殘差作為下一次學習的目標。1 直方圖...

關於技術的學習及批判

在學習技術的大道上,總有無數的坑等著你.比某些人摸著石頭過河還困難.尤其是當你想脫離基本的控制項拖拽,及拼crud的時候.這哥們理論還是很強的,水平肯定沒有問題,但是更欣賞他的一點就是 批判 學習很多時候不是乙個接受的過程,尤其是對於計算機這種發展飛速的東西,再厲害的牛人,10年前搞出來的東西放在現...