2014-03-12 5 views
10

In POSIX, warum ist der offene Systemaufruf in fcntl.h deklariert, während der Systemabschlussaufruf in unistd.h deklariert ist? Ich nehme an, dass dies ein historisches Artefakt ist, aber dieses Paar erscheint mir besonders merkwürdig, da man oft nach dem Öffnen schließen muss.Warum ist open in fcntl.h deklariert, während close in unistd.h deklariert ist?

+5

Kann oder darf nicht verwandt sein, aber es ist vielleicht nützlich zu beachten, dass es einige andere Routinen als 'open()' gibt, die Dinge zurückgeben, die schließlich an 'close()' übergeben werden sollten. In diesem Sinne hat 'close()' eine viel breitere Anwendung als 'open()' does ... – twalberg

+0

Das macht Sinn. Vielleicht in den frühen Tagen von UNIX, als alles eine Datei war (ich frage mich, ob das jemals wahr war), waren sie vielleicht in der gleichen Header-Datei. Dann, nachdem andere auf Deskriptoren basierende APIs (z. B. Socket) herumgekommen sind, ergab es mehr Sinn, die allgemeinen Datei-Deskriptor-Routinen (Lesen/Schreiben/Schließen) in unistd.h mit den APIs zu haben, die die verschiedenen umher verteilten Deskriptor-Typen erzeugen. –

+0

Die Headerdatei 'unistd.h' ist neuer als' fcntl.h'. Ich glaube nicht, dass es vor POSIX ein unistd.h gab. Es war ein echter Bär, herauszufinden, wo (wenn?) Dinge erklärt wurden. Ich kann mir nicht sicher sein. Es war vor langer Zeit. –

Antwort

1

Wie bereits erwähnt, werden auch Buchsen und Rohre geschlossen. Aber wahrscheinlich ist der ursprüngliche Grund, dass open Flags wie O_RDONLY benötigt, die in fcntl.h definiert sind, so dass Sie auch den Prototyp in diese Datei schreiben könnten.

Verwandte Themen