2016-04-05 15 views
0

Die POSIX-SystemschnittstellenWelche POSIX-Systemschnittstellen hängen von/bin/sh ab?

verwenden beide /bin/sh externe Programme auszuführen. Gibt es andere POSIX-Funktionen, die, wenn ich sie in meiner Anwendung verwende, eine Abhängigkeit von /bin/sh einführen?

+3

'popen' ist keine Standard-C-Funktion. – nwellnhof

+1

Low-Level-Funktionen wie Open-Close-Read-Write-Routinen, die vom Un * x-Kernel bereitgestellt werden, aber C-Executables funktionieren perfekt unter DOS und Windows ™, daher stellen sie auch diese Routinen bereit. –

+2

@nwellnhof Er sagte nicht Standard C. Die Frage ist verschlagwortet mit Unix. – Barmar

Antwort

4

Die Liste enthält mindestens:

  • popen()

  • system()

  • execlp() und execvp()

    In den Fällen, in denen die anderen Mitglieder des exec fami Ly von Funktionen würde errno [ENOEXEC] bezeichnen die execlp() und execvp() Funktionen ausführen

    einen Befehlsinterpreter und die Umgebung des ausgeführten Befehls sein sollen, als ob der Prozeß aufgerufen, um die sh Dienstprogramm

  • wordexp() (möglicherweise) fehlschlagen und festgelegt

    Während wordexp() vollständig als Bibliotheksroutine implementiert werden konnte, wird erwartet, dass die meisten Implementierungen eine Shell in einem Unterprozess ausführen, um die Erweiterung auszuführen.

Zitate sind von POSIX.

+0

Es sieht so aus, dass 'posix_spawn()' auch '/ bin/sh' verwendet, wenn die neue Prozessabbilddatei keine ausführbare Datei ist. – rphv

+0

@rphv: das ist möglich, aber es wird weder in Posix noch in den Manpages für Linux oder FreeBSD erwähnt. Hast du das Experiment versucht? Wenn ja, auf welchem ​​System? (Die Verwendung von/bin/sh ist nicht das Gleiche wie die Interpretation einer Shebang-Linie. Der Shebang kann ohne Shell gehandhabt werden, da er keine Argumentparsing durchführt.) – rici

+0

Ich kam zu dieser Schlussfolgerung, indem ich das glibc-Repository übergreifte. In sysdeps/posix/spawni.c gibt es den folgenden Kommentar zusammen mit einem Aufruf von '__execve' mit dem Pfad'/bin/sh': "Die Datei ist zugänglich, aber es ist keine ausführbare Datei. Rufen Sie die Shell auf, um sie als zu interpretieren ein Skript." – rphv

Verwandte Themen