意義:解決多檔案編譯模組化的問題
格式:
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...