2009-12-09 3 views
0

이 코드에 찾아 보게하십시오 : "안녕하세요"를이 프로그램이 인쇄됩니다Solaris에서 popen에 문제가 있습니까?

#include <unistd.h> 
#include <stdlib.h>  
#include <stdio.h> 
int main() { 
    FILE *process_fp = popen("make -f -", "w"); 
    if (process_fp == NULL) { 
     printf("[ERR] make not found!\n"); 
    } else { 
     char txt[1024] = "all:\n\[email protected] Hello World!\n"; 
     fwrite(txt, sizeof(char), strlen(txt), process_fp); 
     pclose(process_fp); 
    } 
} 

합니다. Linux 플랫폼에서 작동하지만 Solaris에 실패했습니다. 여기서 불평은 make: *** fopen (temporary file): No such file or directory. Stop.입니다.

이 문제를 어떻게 해결할 수 있습니까?

+2

OS 나 컴파일러에서 버그를 발견하는 것은 드물다. 사고 방식으로 시작할 때 도움이되는 코드는 문제가 될 수있다. "선택은 깨지지 않았습니다"("실용적인 프로그래머"의 팁)을 기억하십시오. 참조 : http : //www.travisswicegood.com/index.php/2009/01/04/select-isn-t-broken – sateesh

+0

나를 위해, (opensolaris 2008.11 x86) 이것은 리눅스에서와 마찬가지로 잘 작동합니다. – Kimvais

+0

Works 나를 위해 SPARC의 Solaris 10에서도 컴파일러가 strlen()에 #include 을 잊어 버렸다고 올바르게 지적했지만. 어떤 버전의 Solaris에서 문제가 발생합니까? $ PATH에 어떤 버전의 make가 있습니까? (Solaris make 또는 GNU make) – alanc

답변

3

수동으로 make -f -을 실행하십시오. 아마도 Solaris에서는 작동하지 않습니다. 대신 gmake (GNU make 용)을 시도하십시오.

+3

시도할만한 또 다른 것은 "truss ./a.out"을 호출하여 시스템 호출을 추적하여 실제로 실패한 fopen 호출이 무엇인지 확인하는 것입니다. – Kimvais

관련 문제