当前位置: 技术问答>linux和unix
linux c 调用gcc命令
来源: 互联网 发布时间:2017-02-26
本文导语: 我想做一个c++或者c程序可以将一段源代码编译执行 可是在调用gcc时 如果源代码有错误程序捕获不到错误信息 用到了匿名管道 #include #include #include #include #include int mysystem(char* c...
我想做一个c++或者c程序可以将一段源代码编译执行 可是在调用gcc时 如果源代码有错误程序捕获不到错误信息
用到了匿名管道
和popen
这是什么原因呢? 不有其他方法吗?
用到了匿名管道
#include
#include
#include
#include
#include
int mysystem(char* cmdstring, char* buf, int len)
{
int fd[2];
pid_t pid;
int n, count;
memset(buf, 0, len);
if (pipe(fd) 0 && count > len)
count += n;
close(fd[0]);
if (waitpid(pid, NULL, 0) > 0)
return -1;
}
else
{
close(fd[0]);
if (fd[1] != STDOUT_FILENO)
{
if (dup2(fd[1], STDOUT_FILENO) != STDOUT_FILENO)
{
return -1;
}
close(fd[1]);
}
if (execl("/bin/sh", "sh", "-c", cmdstring, (char*)0) == -1)
return -1;
}
return 0;
}
int main()
{
char buf[10];
mysystem("gcc -o add add.c",buf,11);
printf("=%s=",buf);
return 0;
}
和popen
int main(void)
{
FILE *stream;
char buf[1024];
memset(buf,'',sizeof(buf));
stream = popen("gcc -o mail mail.c","r");
fread(buf,sizeof(char),sizeof(buf),stream);
fclose(stream);
printf("qqqqq:%s:sssn",buf);
return 0;
}
这是什么原因呢? 不有其他方法吗?
|
孩子, 一般错误都是打印到stderr的,gcc同样如此, 请将子进程的dup2(pipe[1], STDERR_FILENO);
|
简单点的话,你执行gcc的时候2>&1