popen(): Verhalten außerhalb von Windows unverständlich

C

CrimsonKing

Guest
Kleines C-Problem, das mich gerade ein bisschen ärgert - folgender Code verhält sich (nach meinem Verständnis) inkonsistent:

Code:
  FILE* curl_exec;
#ifdef _WIN32
  if ((curl_exec = _popen("curl.exe 2>&1", "rt")) == NULL) {
#else
  if ((curl_exec = popen("curl 2>&1", "rt")) == NULL) {
#endif
     puts("You don't seem to have a cURL executable in your $PATH. Mind to fix that?");
  }

Unter FreeBSD (mit installiertem curl, sonst wäre es tatsächlich witzlos) findet das Programm curl nicht, unter Windows geht alles wie erwartet (überraschenderweise sogar die Umleitung).

Was übersehe ich?
 
Moin CrimsonKing,

Laut popen(3) wird von popen die Shell /bin/sh gestartet mit dem gewünschten Kommando als Parameter für diese Shell. Das bedeutet, dass das Environment in und für /bin/sh korrekt gesetzt sein muss.
Bei Windows ist es halt zufällig gesetzt :)

Grüßle Jürgen
 
Sollte die Shell nicht global installierte Programme sowieso kennen, wenn der Nutzer, der das Programm startet, sie auch sieht? Den festen Pfad dranzuschreiben würde die Portabilität doch nachdrücklich beeinträchtigen.
 
:rolleyes: Danke... das passiert, wenn man mal Portabilität voraussetzt (und keinen Bock auf Handbuchlesen hat; wahrscheinlich verdiene ich Schläge (mit'm WLAN-Kabel) dafür). "r" geht. :o
 
Zurück
Oben