2009-12-09 52 views
0

请对这个码一看: “Hello World” 的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

只是一个相关说明,在操作系统或编译器中发现一个错误是很少见的。所以当你从心态开始时,一定会有一些代码出现问题。记住“Select is not broken”(来自“Pragmatic Programmer”的提示)。另见:http://www.travisswicegood.com/index.php/2009/01/04/select-isn-t-broken – sateesh 2009-12-09 09:22:05

+0

对我来说,(opensolaris 2008.11在x86上)和Linux一样工作 – Kimvais 2009-12-09 09:25:14

+0

Works对于我在SPARC上的Solaris 10上,尽管编译器正确指出您忘记了strlen()的#include 。 你遇到什么版本的Solaris? 在$ PATH中找到了什么版本的make? (Solaris make或GNU make) – alanc 2009-12-09 15:07:29

回答

3

尝试手动运行make -f -;它可能不适用于Solaris。请尝试gmake(用于GNU make)。

+3

另一件值得尝试的事情可能是做“truss ./a.out”来跟踪系统调用,以查看实际失败的fopen调用是什么。 – Kimvais 2009-12-09 09:10:46