2009-06-12 709 views

回答

7

'kernel32.dll'也會轉換爲libc.so.6。由於Windows不是POSIX的最低級別,因此它需要一個額外的層來將POSIX libc調用轉換爲本地Win32調用。這是msvcrt.dll的用途。 Kernel32.dll包含最低級別的調用。在Linux上,這些系統調用已經是POSIX,所以不需要額外的庫。

+0

這不完全準確 - 大多數msvcrt函數都是在* msvcrt本身中處理的,像strtok這樣的東西肯定不會進入內核! – 2009-06-12 19:25:12

0

您將手動查找您要使用的kernel32.dll中的win32函數,並在linux/gnu中查找替換項。有很多Linux使用的共享庫。並非所有操作系統都在同一地點直接替換。有些圖書館會照顧跨平臺的東西。

+0

嗯,我只是想看到一個通用的列表。例如,我應該在哪裏找到brk和sbrk? http://linux.die.net/man/2/sbrk – Unknown 2009-06-12 19:16:07

+0

@未知:在libc中。 – Juliano 2009-06-12 19:19:28

2

libc相當於Linux中的kernel32,標準庫的GNU擴展處理所有可以調用內核的方式。 (從技術上來說,是的libc NTDLL的相當,但不倫不類)

編輯:只是爲了澄清 - 內核本身出口的一些所謂以特殊的方式被稱爲系統調用函數;這些系統調用被實際功能包裝;在Linux上,這是在libc中完成的,在Windows上完成兩次,一次是ntdll(即NtCreateFile),然後是Kernel32(CreateFileW/A)。

Kernel32提供了許多其他函數,它們不是系統調用(即在用戶模式下保持100%),就像libc一樣。

4

msvcrt.dll與libc.so.6沒有什麼可比性,因爲第一個是VC++(msvcrt - > MicroSoft Visual C++ RunTime)的特定DLL。系統調用(open,close,read,write等)也在libc中。它們只是用匯編語言編寫的軟件中斷的簡單包裝。

相關問題