Konrad Rosenbaum konrad@silmor.de (Do 03 Apr 2008 16:44:57 CEST):
On Thu, April 3, 2008 15:08, Torsten Werner wrote:
ich stehe wieder mal auf dem Schlauch: wie finde ich in einem C-Programm den vollständigen Pfad zu argv[0], wenn dort z.B. nur "gcc" drin steht? Ich suche eine Funktion, die mir in diesem Fall "/usr/bin/gcc" zurück gibt.
Die portable aber unsichere Variante:
Schauen ob es nur ein Dateiname oder ein (relativer/absoluter) Pfad ist (enthaelt ein "/"). Falls Pfad: fertig. Falls Dateiname:
Ich bin immer noch der Meinung, daß es ein Trugschluß ist, anzunehmen, daß dort *irgend* etwas drinsteht, was mit dem aufgerufenen Binary in Zusammenhang steht. (s. z.B. "-bash", bekommt die "/bin/bash" vom Login beim Start dort in argv[0] rein).
Beim inetd ebenfalls: dort gibst Du das Programm und dann argv[0]..[n] an.
$PATH variable (getenv("PATH")) auseinandernehmen und schauen was das erste Verzeichnis mit einer Datei ist die den richtigen Namen hat.
export -n PATH PATH=/x/y/z program
Was sieht das Programm dann in PATH? NICHTS. Weder portabel noch sicher. Aber eigentlich schon dort die o.a. Dinge nicht nutzber - es muß in argv[0] nichts stehen, was Du im PATH finden kannst.