C語言基礎之檔案

2021-08-14 13:14:46 字數 3305 閱讀 1418

意義:解決多檔案編譯模組化的問題

格式:

main:(目標)main.0 (依賴)

(乙個tab)gcc main.o -o main (命令)

makefile檔名必須為makefile或者makefile,其餘檔名要使用make -f 檔名命令告訴系統去哪找makefile檔案

gcc命令:

gcc -c 編譯到目標**,不進行鏈結 (gcc -c 檔案.c 生成 檔案.o)

gcc -o 《檔案》 輸出到《檔案》 (gcc -o 目標檔名.o 檔案.o)

1、靜態檔案(inode)

硬碟中的檔案,就是靜態檔案。檔案都是以多個塊和多個扇區組成的。一般情況,乙個扇區(512位元組),64個扇區組成乙個塊。在硬碟中,對檔案管理有乙個特定規則(檔案管理表+真實的內容):檔案管理表,這個表中是以檔案為單位提供了各個檔案的所有資訊 (每乙個檔案資訊表就對應乙個結構體,這個結構體就稱之為inode,也叫i節點,這個檔案的包含的多少塊、多少扇區),而我們通過查詢這個表就可以找到我們所需要檔案的內容。

我們找檔案,通過(檔案名字)找的。第一步:在檔案管理表中,找到這個檔案的名字,第二部,訪問這個檔案。u盤格式化:1、快速格式化,清除了你的檔案管理表,檔案系統就找不到你所需要的檔案名字 ,你的真實內容還在硬碟裡,可以部分恢復 2、徹底格式化,這個就是把檔案真實內容也清除掉了,u盤不能通過軟體技術恢復了,必須借助****機構(通過物理機制,通過硬體的記憶恢復)。

聯絡:生活中,處理小檔案的乙個手段,檔案壓縮。把扇區的空餘位元組都利用起來,減少了占用硬碟上的空間。硬碟喜歡大檔案。

2、動態檔案(vnode)(在記憶體中)

乙個程式的執行就是乙個程序,而我們開啟的檔案就屬於這個程序。而作業系統對於每乙個程序都有乙個結構體進行管理,這個管理當前程序所有資訊的結構體,我們就叫做(程序資訊表)。這個表中有乙個指標指向我們的檔案管理表,這個檔案管理表就包含了本程序開啟的所有檔案,通過查詢檔案管理表的index(檔案描述符fd,相當於這個結構體陣列的下標),就得到了我們的檔案所有資訊的結構體(vnode,v節點),而這個結構體的指標就是檔案指標。

#include 

#include

int main(void)

;#endif

struct tm *p_tm = localtime(&t);

//不判斷

printf("%d-%d-%d %d:%d:%d\n", p_tm->tm_year, p_tm->tm_mon, p_tm->tm_mday, p_tm->tm_hour, p_tm->tm_min, p_tm->tm_sec);

return

0;}

#include 

#include

#include

#include

#include

#include

int main(void)

else

printf("fd = %d.\n", fd);

#if 0

int fd = -1;

//開啟乙個檔案

fd = open("1.txt", o_rdwr | o_creat | o_trunc, 0666);

if (fd < 0)

else

printf("fd = %d.\n", fd);

//關閉終端輸出

close(1);

//複製了乙個新的fd_new檔案描述符,指向1.txt

int fd_new = dup(fd); // 就完成了標準輸出的檔案重定位,此行開始所有的終端輸出都會寫在檔案裡(1.txt)

if (fd_new < 0)

else

//== 寫檔案

printf("fd_new = %d.\n", fd_new);

//對1.txt寫操作

while (1)

#endif

return

0;}

#include 

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

int main(void)

//檔案許可權

if (st.st_mode & s_irusr) // 真或者假

else

printf("-");

if (st.st_mode & s_iwusr)

else

printf("-");

if (st.st_mode & s_ixusr)

else

printf("-");

if (st.st_mode & s_irgrp) // 真或者假

else

printf("-");

if (st.st_mode & s_iwgrp)

else

printf("-");

if (st.st_mode & s_ixgrp)

else

printf("-");

if (st.st_mode & s_iroth) // 真或者假

else

printf("-");

if (st.st_mode & s_iwoth)

else

printf("-");

if (st.st_mode & s_ixoth)

else

printf("-");

//hard連線數

printf(" %d", st.st_nlink);

//獲得use的使用者名稱

struct passwd *p_uid = null;

p_uid = getpwuid(st.st_uid);

if (null == p_uid)

//獲得group的使用者名稱

struct group *p_gid = null;

p_gid = getgrgid(st.st_gid);

if (null == p_gid)

printf(" %s %s", p_uid->pw_name, p_gid->gr_name);

printf(" %d\n", st.st_size);

} return

0;}

c語言程式設計基礎之檔案操作

檔案使用方式 意義 rt 唯讀開啟乙個文字檔案,只允許讀資料 wt 只寫開啟或建立乙個文字檔案,只允許寫資料 at 追加開啟乙個文字檔案,並在檔案末尾寫資料 rb 唯讀開啟乙個二進位制檔案,只允許讀資料 wb 只寫開啟或建立乙個二進位制檔案,只允許寫資料 ab 追加開啟乙個二進位制檔案,並在檔案末尾...

C語言檔案基礎

指程式與資料的互動是以流的形式進行的。進行c語言檔案的訪問時,都會先進行 開啟檔案 操作,這個操作就是在開啟資料流,而 關閉檔案 操作就是關閉資料流。指在程式執行時,所提供的一塊儲存空間 在記憶體中 可用來暫時存放做準備執行的資料。它的設定是為了提高訪問效率,因為記憶體的訪問速度比磁碟驅動器快得多。...

c語言程式設計基礎之檔案操作(二)

資料塊讀寫函式fread和fwtrite 語言還提供了用於整塊資料的讀寫函式。可用來讀寫一組資料,如乙個陣列元素,乙個結構變數的值等。讀資料塊函式呼叫的一般形式為 fread buffer,size,count,fp 寫資料塊函式呼叫的一般形式為 fwrite buffer,size,count,f...