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?
10
A
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
- 1. Warum ist das `std` Modul nicht deklariert?
- 2. Das Konfigurationselement ist nicht deklariert
- 3. In welcher Kopfzeile ist copy_from_user() deklariert?
- 4. DotNetNuke (v8.4.1 +): LocalResourceFile ist nicht deklariert
- 5. XML-Validierungsfehler: Das Element ist nicht deklariert
- 6. Warum sagt Xcode, dass diese Variable nicht deklariert ist?
- 7. Warum wird die GUID-Struktur so deklariert, wie sie ist?
- 8. Warum WebMethod als Static deklariert?
- 9. Warum ist das "f" erforderlich, wenn Floats deklariert werden?
- 10. Lisp: CHAR ist weder deklariert noch gebunden
- 11. Wo ist die Struktur vop_vector deklariert?
- 12. undefinierte Variable, aber Variable ist definiert/deklariert
- 13. SP2-0552: Bindevariable "NEW" ist nicht deklariert
- 14. Script ist nicht deklariert - err msg
- 15. Warum ist kein "neuer" Wurffehler, wenn die Klasse nicht in PHP deklariert ist?
- 16. deklariert long [] Array in Java
- 17. Wie überprüfe ich, ob eine Variable in Swift deklariert ist?
- 18. Warum wird Silverlight 5 Assembly.LoadFrom intern deklariert?
- 19. Warum gibt es mehrere fcntl.h in Linux?
- 20. Open-Close-Prinzip Beispiel
- 21. Warum werden Variablen mit ihrem Schnittstellennamen in Java deklariert?
- 22. Warum argv [] als const deklariert wird?
- 23. Wie deklariert enums in angularjs?
- 24. Warum werden Objektvariablen mit einem Stern deklariert?
- 25. Warum wird Reads nicht als kovariant deklariert?
- 26. Marionetten-Duplikat: Klasse [Mongodb] ist bereits deklariert; kann nicht redeclare
- 27. Warum ist eine Const-Variable, die als Klassenmitglied deklariert ist, noch modifizierbar?
- 28. Warum deklariert ein Array als Objekt in Java korrekt?
- 29. Wie deklariert man Eingaben in Rcpp-Funktionen?
- 30. Warum wird die Klasse in Java als statisch deklariert?
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
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. –
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. –