- 论坛徽章:
- 0
|
bc是linux下的高精度计算器语言,支持交互式操作。
同时,也支持如下操作方式: bc <infile >;outfile
其中,infile中包含如下bc操作语句 a=1; print(a);
则outfile中的内容为1。
试想编程调用bc进行计算,故编程如下:
#include <stdio.h>;
#include <unistd.h>;
#define MAX_LINELEN 256
#define TMPDIR "/tmp/"
main(int argc,char *argv[])
{
char *cmd;
char *param;
char *arg[10];
char infname[MAX_LINELEN+1];
char outfname[MAX_LINELEN+1];
FILE *inf,*outf;
int wgx;
if (argc!=3)
{
printf("Command or parameter missing!\n" ;
exit(0);
}
cmd=argv[1];
param=argv[2];
sprintf(infname,"%smy.in",TMPDIR);
sprintf(outfname,"%smy.out",TMPDIR);
inf=fopen(infname,"w" ;
fprintf(inf,"%s",param);
fclose(inf);
inf=freopen(infname,"r",stdin);
outf=freopen(outfname,"w",stdout);
arg[0]=cmd;
wgx=execv(cmd,arg);
printf("%d\n",wgx);
}
编译后,生成可执行程序a.out,在bash下运行程序如下:
./a.out bc a=1\;print\(a\)\;
(注:分号、括号在bash下需先转义)
根据编程思路,输入、输出文件均能正常建立并打开,但execv(execvp)函数调用出错,变量wgx值为-1。
究竟错在何处,请大虾指点,万分感谢!!! |
|