如何在unix系统命令中捕获语法错误

时间:2017-05-25 13:14:17

标签: c++

我正在使用函数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

当我使用不正确的语法运行代码时,如何捕获错误异常?

1 个答案:

答案 0 :(得分:3)

当你致电pclose时,你会抓住它。 awk将向stderr写一条关于语法错误的错误消息,您的第一个getline将无法获取任何数据,然后pclose将返回{{1}的退出状态},它将为非零,表示发生了错误。