2010-06-01 6 views

Antwort

7

linux/unistd.h weist tatsächlich asm/unistd.h, welche wiederum auf entweder asm/unistd_32.h oder asm/unistd_64.h, die ist, wo System Rufnummern definiert und auf Benutzerraum präsentiert abhängig von der Architektur des Systems. Diese kommen vom Kernel.

bits/unistd.h ist eine Sammlung von Makros, die unistd.h (meistens Sachen zu helfen, Pufferüberläufe zu verhindern) zu ergänzen, die über bedingt enthalten ist:

/* Define some macros helping to catch buffer overflows. */ 
#if __USE_FORTIFY_LEVEL > 0 && defined __extern_always_inline 
# include <bits/unistd.h> 
#endif 

Im Wesentlichen der einzige POSIX erforderlich Header ist in der Tat nur unistd.h Der Rest sind entweder Erweiterungen oder Definitionen aus dem Kernel. So, nur einschließlich unistd.h ist alles, was Sie tun müssen, wird alles, was Sie brauchen, abhängig von Ihrer Architektur und was für Build-Optionen Sie ausgewählt haben.

3

Es ist eine gängige Technik in C und C++ - Sie haben eine einzige Datei mit dem "Standard" Namen in der "Standard" -Platz, in diesem Fall ./unistd.h, und dann diese Datei eine oder mehrere Implementierungen enthalten bestimmte Dateien, abhängig von Präprozessor-Makros. Wenn Sie sich fast alle "Standard" C- oder C++ - Header-Dateien ansehen, werden Sie sie einschließlich anderer Dateien sehen, die in keinem Standard erwähnt werden.

0

Grundsätzlich denken Sie an /usr/include/unistd.h als eine intelligente symbolische Verbindung. Es wird auf eine korrekte Implementierung in Abhängigkeit von Ihren Betriebsbedingungen hinweisen.

Das heißt, es macht manchmal schwierig herauszufinden, was diese korrekte Implementierung ist.

Verwandte Themen