• Diese Seite verwendet Cookies. Indem du diese Website weiterhin nutzt, erklärst du dich mit der Verwendung von Cookies einverstanden. Erfahre mehr

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

C

CrimsonKing

Guest
Themenstarter #1
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?
 
#2
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
 
C

CrimsonKing

Guest
Themenstarter #3
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.
 
C

CrimsonKing

Guest
Themenstarter #5
: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