2012-10-15 25 views
0

我正在閱讀有關設備驅動程序的內容,我有一個與UNIX哲學有關的問題,關於所有文件。Linux中的系統調用和文件操作

當用戶發出一個命令,比如打開一個文件,然後執行什麼操作 - 系統調用還是文件操作? sys_open是系統調用,open是文件操作。你能否詳細說明這個話題。

在此先感謝。

+0

'open'是'libc'調用(您的程序調用)。 'open()'在內部發出系統調用'sys_open()'。 – alk

+0

請參閱http://stackoverflow.com/a/12788057/841108 –

回答

1

快速的解答,希望對大家有所幫助:

所有的系統調用的工作方式相同。系統呼叫號碼與系統呼叫參數一起被存儲在某處(例如,在一個寄存器中)。在開放系統調用的情況下,參數是:指向文件名和權限字符串的指針。然後,打開的函數使用適當的函數引發軟件中斷(syscall,int ...,這取決於硬件)。

至於任何中斷,內核被調用(在內核模式下)來處理中斷。系統檢測到中斷是由系統調用引起的,然後讀取寄存器中的系統調用編號,看到它是一個開放的系統調用,在內核內存中創建文件描述符,然後通過調用驅動程序打開來繼續實際打開文件功能。文件描述符ID然後被存回寄存器並返回到用戶模式。

然後從寄存器中檢索文件描述符並返回open()

+0

好的非常感謝。所以你的意思是說,當用戶調用一個請求系統調用被調用,並依次使用文件操作? – shingaridavesh

+0

@shingaridavesh如果通過文件操作實際上是在驅動器上寫入文件,那麼系統會爲用戶(在驅動程序的幫助下)執行文件操作。用戶沒有意願去做。 – Ben

+0

因此在設備驅動程序文件操作和系統調用指向相同的情況下,如在系統調用open中將指向open.c(linux/fs/open.c)或驅動程序中定義的fops? – shingaridavesh

0

「每個打開的文件(文件 結構,我們很快就會考察內部表示)(通過包含一個叫做f_op場指向一個file_operations結構)有自己的一套功能 有關。的 操作主要負責執行系統調用,因此, 命名爲open,read等。

這是來自LDD章節的字符驅動程序。任何人都可以請詳細說明最後一行是什麼意思。