linux作業系統奉行一切皆檔案的理念,所有檔案設備幾乎都可以用一套系統呼叫即open()/close()/write()/read()等來操作。系統呼叫和C庫調用操作檔類似。 Linux自備的man手冊是最權威的。透過查看man手冊來查看系統呼叫用法。
代號—— 代表的意義
#1 —— 使用者在shell環境下可操作/可執行的命令
2 —— 系統核心可呼叫的函數與工具
3 —— 一些常用的函數與函數庫,大部分C的函數庫
4 —— 裝置檔案的說明,通常是在/dev下的裝置
5 — — 設定檔或某些檔案的格式
6 —— 遊戲
7 —— 管理與協定等,例如Linux檔案系統、網路協定等
8 —— 系統管理員可用的指令
9 —— 與Kernel有關的檔案
注意,系統的頭檔在Linux中一般存放在/usr/include
目錄下;下麵包含的一些頭檔有的帶了sys,其實是include底下的子目錄中的頭檔
open()——開啟或建立一個檔案
返回值類型: int——文件描述符fd,每打開一個文件,就會得到一個文件描述符,這個文件描述符是整形的,我們透過文件描述符進行讀寫操作。
失敗:-1
成功:>= 0,即檔案描述子;
mode_t是一個類型別名,實際上就是一個有符號的整數,對open函數而言,僅僅當創建新檔案時才使用第三個參數
flag:打開標誌
注意: 這些其實都是定義的一些宏,當需要使用到多個參數時,使用位元或「 |
」構成多個flag參數
也可跟隨下面的方式一起使用:
其他不一一介紹,需要使用時自查。
write()
傳回值:
若成功為已經寫入的位元組數;
若出錯為-1;
注意:計劃寫入的位元組數和函數的回傳值當不相等時,表示寫入出現了錯誤,可以用來檢驗寫入是否成功;
參數:
#fd
:寫入檔案的檔案描述子;
buf
:存放待寫資料的快取;
count
:要求寫入一次資料的位元組數;
#注意:
對於普通文件,寫操作從檔案的目前位移量處開始,若如果在開啟該檔案時,指定了O_APPEND選擇項,則在每次寫入作業之前,將檔案位移量設定在檔案的目前結尾處。在一次成功寫入之後,該檔案位移量增加實際寫的位元組數。 read()傳回值 :讀到的位元組數
- 若已到檔案尾為0;若出錯為-1;
#參數
- ##fd
:讀取檔案的檔案描述子;
- buf
:存放讀取資料的快取;
count
注意:當一個行程終止時,它所開啟的檔案都會由核心自動關閉。
註:這些不帶快取的函數都是核心提供的系統呼叫;這正是和我們在C語言中學到的那些IO操作不同的地方,他們不是標準C的組成部分,但是POSIX的組成部分。
標準C對檔案操作時都是透過對FILE的結構體指標進行操作的,而這裡使用的是檔案描述子。
檔案描述子的範圍是0——OPEN MAX,早期的Unix採用的上限為19(即允許每個進程開啟20個檔案),現在很多系統將即增加到63,Linux為1024,具體多少可以在
檔案描述子與檔案指標
FILE * fdopen(int fd,const char *mode),將檔案描述子轉為檔案指標;
int fileno(FILE *stream),將檔案指標轉換為檔案描述子;
lseek函數
功能: 定位一個已開啟的檔案
off_t lseek(int fd,off_t offset,int whence);
fd
:已經開啟的檔案描述子;offset
:位移量;whence
:定位的位置,即基準點SEEK_SET
:將該檔案的位移量設為距離檔案開始處offset個位元組;SEEK_CUR
:將該檔案的位移量設為其目前值加offset,offset可正可負;SEEK_END
:將該文件的位移量設定為文件長度加offset,offset可正可負(此時若為正值,就涉及到空洞文件了,請看下面的講解);返回值:**若成功則返回新的檔案位移量(絕對位移量)**若出錯為-1;定位到檔案尾部時,可以返回檔案的大小;
lseek函數也可以用來確定所涉及的檔案是否可以設定位移量,如果檔案描述子所引用的是一個管道或FIFO,則lseek回傳-1,並將errno設定為EPLPE;
空洞檔案範例:
##include<stdio.h> #include<fcntl.h> #include<string.h> #include<stdlib.h> #include<unistd.h> #include<errno.h> //生成空洞文件 char *buffer = "0123456789"; int main(int argc,char *argv[]) { if(argc < 2) { fprintf(stderr,"-usage:%s [file]\n",argv[0]); exit(1); } int fd = open(argv[1],O_WRONLY | O_CREATE | O_TRUNC,0777); if(fd < 0) { perror("open error"); exit(1); } size_t size = strlen(buffer) * sizeof(char); //将字符串写入到空洞文件中 if(write(fd,buffer,size) != size) { perror("write error"); exit(1); } //定位到文件尾部的10个字节处 if(lseek(fd,10L;SEERK_END) < 0) { perror("lseek error"); exit(1); } //从文件尾部的10个字节处再写入字符串 if(write(fd,buffer,size) != size) { perror("write error"); exit(1); } close(fd); return 0; }
我們可以看到用more指令查看文件內容時,發現顯示的內容只有一次寫入的結果,用od
-c指令查看文件的ASSCI碼,我們會發現在兩次內容之間,有10個\0,這就是空洞,用vim開啟該文件內容也可以看到,有10個^@符。
註:每個檔案都有一個與其相關聯的“當前檔案偏移量”,它是一個非負整數,用以度量從檔案開始計算的位元組數。通常讀寫操作都以檔案目前偏移量開始,並使得偏移量增加所讀或所寫的位元組數。按系統默認,當開啟一個檔案時,除非指定O_APPEND選擇項,否則該檔案位移量被設定為0;
範例:
檔案表 ,以記錄開啟的文件,文件描述符其實就是文件表的下標
- 0——FILE* stdin,標準輸入
- 1——FILE* stdout,標準輸出
- 3——FILE* stderr,標準錯誤輸出
- #本程式已經預設開啟了三個文件,fd排到第四個,所以編號為3
#接下來進行文件讀取
- 先開啟原來的二進位檔案
開啟一個新的檔案
從原來的二進位檔案讀取一部分寫入新檔案
重複讀寫
直到讀完,寫完就停止【read() == 0作為循環停止的條件,讀不到就是讀完】
#完成複製
複製完成
- 檔案偏移(起始從0開始,檔案指標隨著寫入資料進行偏移)
- 引用計數(幾個行程正在使用這個打開的檔案)
- inode節點(存放進程的屬性資訊:誰創建了,名字是什麼,在磁碟哪裡儲存。透過這個inode節點,我們才能找到對應的這個具體的檔案)
- 開啟方式:例如只讀方式,只寫方式開啟
測試1:先開啟檔案再fork
測試2:先fork再開啟文件
修改程式碼後,運行結果發生以下變化:以上是Linux操作檔的底層系統怎麼調用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

Linux的維護模式可以通過GRUB菜單進入,具體步驟為:1)在GRUB菜單中選擇內核並按'e'編輯,2)在'linux'行末添加'single'或'1',3)按Ctrl X啟動。維護模式提供了一個安全環境,適用於系統修復、重置密碼和系統升級等任務。

進入Linux恢復模式的步驟是:1.重啟系統並按特定鍵進入GRUB菜單;2.選擇帶有(recoverymode)的選項;3.在恢復模式菜單中選擇操作,如fsck或root。恢復模式允許你以單用戶模式啟動系統,進行文件系統檢查和修復、編輯配置文件等操作,幫助解決系統問題。

Linux的核心組件包括內核、文件系統、Shell和常用工具。 1.內核管理硬件資源並提供基本服務。 2.文件系統組織和存儲數據。 3.Shell是用戶與系統交互的接口。 4.常用工具幫助完成日常任務。

Linux的基本結構包括內核、文件系統和Shell。 1)內核管理硬件資源,使用uname-r查看版本。 2)EXT4文件系統支持大文件和日誌,使用mkfs.ext4創建。 3)Shell如Bash提供命令行交互,使用ls-l列出文件。

Linux系統管理和維護的關鍵步驟包括:1)掌握基礎知識,如文件系統結構和用戶管理;2)進行系統監控與資源管理,使用top、htop等工具;3)利用系統日誌進行故障排查,借助journalctl等工具;4)編寫自動化腳本和任務調度,使用cron工具;5)實施安全管理與防護,通過iptables配置防火牆;6)進行性能優化與最佳實踐,調整內核參數和養成良好習慣。

Linux維護模式通過在啟動時添加init=/bin/bash或single參數進入。 1.進入維護模式:編輯GRUB菜單,添加啟動參數。 2.重新掛載文件系統為讀寫模式:mount-oremount,rw/。 3.修復文件系統:使用fsck命令,如fsck/dev/sda1。4.備份數據並謹慎操作,避免數據丟失。

本文探討如何在Debian系統上提升Hadoop數據處理效率。優化策略涵蓋硬件升級、操作系統參數調整、Hadoop配置修改以及高效算法和工具的運用。一、硬件資源強化確保所有節點硬件配置一致,尤其關注CPU、內存和網絡設備性能。選擇高性能硬件組件對於提升整體處理速度至關重要。二、操作系統調優文件描述符和網絡連接數:修改/etc/security/limits.conf文件,增加系統允許同時打開的文件描述符和網絡連接數上限。 JVM參數調整:在hadoop-env.sh文件中調整

本指南將指導您學習如何在Debian系統中使用Syslog。 Syslog是Linux系統中用於記錄系統和應用程序日誌消息的關鍵服務,它幫助管理員監控和分析系統活動,從而快速識別並解決問題。一、Syslog基礎知識Syslog的核心功能包括:集中收集和管理日誌消息;支持多種日誌輸出格式和目標位置(例如文件或網絡);提供實時日誌查看和過濾功能。二、安裝和配置Syslog(使用Rsyslog)Debian系統默認使用Rsyslog。您可以通過以下命令安裝:sudoaptupdatesud


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

SublimeText3漢化版
中文版,非常好用

Dreamweaver Mac版
視覺化網頁開發工具

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器