我正在使用函数popen
来执行系统命令。当语法格式正确时,我的代码对我很好。假设我给popen
提供了不正确的语法,我不知道怎么说。 语法错误 。这里我包含示例代码和输入。
#include <iostream>
#include <stdio.h>
using namespace std;
int main(int argc,char *argv[])
{
//correct syntax
string sysCmd="awk -v FIELDWIDTHS=\"10 8 10 5\" '19970517>=gensub(/(....)(....)/,\"\\\\2\\\\1\",1,$2){print $1}' awktst.txt";
//Incorrect syntax- extra closing braces found
//string sysCmd="awk -v FIELDWIDTHS=\"10 8 10 5\" '19970517>=gensub(/(....)(....)/,\"\\\\2\\\\1\",1,$2)){print $1}' awktst.txt";
FILE *in;
in=popen(sysCmd.c_str(),"r");
if(in==NULL)
{
cout<<"Error in System Cmd Processing "<<endl;
return 0;
}
char *buff=NULL;
size_t maloc=0;
while(getline(&buff, &maloc, in) != EOF){
cout<<buff;
free(buff);
buff=NULL;
}
pclose(in);
return 0;
}
输入样本
Bharath 010619925,1,000,00 100
Ragul 10302002 2,000.00 600
Bala 11171993 3,000.00 500
Arjun 05142003 4,000.00 400
Vimal 06301997 5,000.00 100
Ramesh 05171997 1,000.00 300
Kamal 05151997 2,000.56 200
Vinoth 04201997 3,000.00 500
当我使用不正确的语法运行代码时,如何捕获错误异常?
答案 0 :(得分:3)
当你致电pclose
时,你会抓住它。 awk
将向stderr写一条关于语法错误的错误消息,您的第一个getline
将无法获取任何数据,然后pclose
将返回{{1}的退出状态},它将为非零,表示发生了错误。