我的關聯博文:
test1: lseek基本使用
#include #include #include #include #include #include char string_buf = "hello";**父子程序的檔案描述符、檔案表項、i節點,char char_h = 'h';
int main()
以lseek+fork實驗為切入點進行分析。
實驗思路:
做兩個實驗,一是先fork,父程序先lseek後, 子程序才write,觀察子程序寫入該檔案的偏移在哪。
再乙個實驗是,先lseek,然後才fork。
test2
**父子程序的檔案描述符、檔案表項、i節點
以lseek+fork實驗為切入點進行分析
實驗思路:先fork,父程序先lseek後, 子程序才write,觀察子程序寫入該檔案的偏移在哪。
#include #include #include #include #include #include char string_buf = "hello";編譯執行:char char_h = 'h';
int main()else if( pid > 0)else
close(fd);
return 0;
}
root@lmw-virtual-machine:/home/lmw/mine/linux_c_exercise/fork/當
檔案操作遇上fork# gcc test.c
root@lmw-virtual-machine:/home/lmw/mine/linux_c_exercise/fork/當
檔案操作遇上fork# ./a.out
sizeof(string_buf) = 5
bytes_done = 5
offset = 15
root@lmw-virtual-machine:/home/lmw/mine/linux_c_exercise/fork/當
檔案操作遇上fork# add_1_byte = 1
root@lmw-virtual-machine:/home/lmw/mine/linux_c_exercise/fork/當
檔案操作遇上fork# hexdump -c -n 100 file.txt
00000000 68 65 6c 6c 6f 00 00 00 00 00 00 00 00 00 00 48 |hello..........h|
00000010
root@lmw-virtual-machine:/home/lmw/mine/linux_c_exercise/fork/當檔案操作遇上fork#
root@lmw-virtual-machine:/home/lmw/mine/linux_c_exercise/fork/當檔案操作遇上fork#
實驗現象: 父程序在fork前開啟了檔案,父程序先執行lseek, 子程序延時1秒後才執行寫檔案,則會受父程序剛才的lseek操作影響。
小結: 檔案偏移量這一資訊記錄在核心的檔案表項中,父子程序有自己獨立的檔案描述符表,但是共享檔案表項和i節點。
本實驗父子程序實際上操作的是同乙個檔案表項,所以才產生了這種現象。
test3
**父子程序的檔案描述符、檔案表項、i節點
以lseek+fork實驗為切入點進行分析
實驗思路:先lseek,然後才fork...
#include #include #include #include #include #include char string_buf = "hello";root@lmw-virtual-machine:/home/lmw/mine/linux_c_exercise/fork/當檔案操作遇上fork# gcc test.cchar char_h = 'h';
char char_l = 'l';
int main()else if( pid > 0)else
close(fd);
return 0;
}
root@lmw-virtual-machine:/home/lmw/mine/linux_c_exercise/fork/當檔案操作遇上fork# ./a.out
sizeof(string_buf) = 5
bytes_done = 5
offset = 15
add_1_byte = 1
root@lmw-virtual-machine:/home/lmw/mine/linux_c_exercise/fork/當檔案操作遇上fork# add_1_byte = 1
root@lmw-virtual-machine:/home/lmw/mine/linux_c_exercise/fork/當檔案操作遇上fork# hexdump -c -n 100 file.txt
00000000 68 65 6c 6c 6f 00 00 00 00 00 00 00 00 00 00 4c |hello..........l|
00000010 48 |h|
00000011
root@lmw-virtual-machine:/home/lmw/mine/linux_c_exercise/fork/當檔案操作遇上fork#
檔案偏移量這一資訊記錄在核心的檔案表項中,父子程序有自己獨立的檔案描述符表,但是共享檔案表項和i節點。
本實驗父子程序實際上操作的是同乙個檔案表項,所以才產生了這種現象。
核心檔案結構:
本博文test2、test3中,父子程序操作同乙個檔案表項,如下圖所示
系統程式設計概述(程序)
程序概念 所有的裝置都是圍繞儲存器工作的 標準輸入裝置輸入指令,載入到記憶體中,然後記憶體交給cpu處理指令,將處理好的指令再交給記憶體,內存在交給標準輸出裝置。時載入到cpu的暫存器上處理 什麼是程序 說的通俗一點就是進行中的程式 作業系統通過pcb來控制程序的執行,這個pcb 一種程序描述符 也...
系統程式設計之程序
一 程序相關概述 1 相關指令 ps aux 檢視所有程序 ps aux grep 程序 只會過濾出指定程序資訊 top 指令類似windows任務管理器 2 程序描述符 pid pid 0 稱為交換程序 程序排程 pid 1 init程序 系統初始化 二 c程式的儲存空間是如何分配的 從高位址到低...
系統程式設計之檔案系統程式設計
系統呼叫 所有的作業系統都提供多種服務的入口點,程式由此向核心請求服務。這些可直接進入核心的入口點被稱為系統呼叫。不同作業系統提供了自己的一套系統呼叫,所以系統呼叫無法實現跨平台使用。而且頻繁地系統呼叫,在使用者態和核心態之間切換,很耗費資源,效率不高。c標準庫提供了操作檔案的標準i o函式庫,與系...