当前位置导航:炫浪网>>网络学院>>编程开发>>C++教程>>C++进阶与实例

UNIX 系统下命令行方式

    UNIX或LINUX下很多的命令都是由C语言编写,本程序类似于grep命令.

    本例子摘自K&R的C程序设计语言


    #include
    #include
    #define MAXLINE 1000

    int getline(char *line,int max);
    /*打印所有与第一个参数指定的模式相匹配的行
    -x 表示打印与模式不匹配的所有行
    -n 表示打印行号
    如:find -x -n 模式*/
    /*
    遇到-号跳过,检查下一个字符是什么参数
    检查是否为子串
    输出*/

    int main(int argc,char *argv[])
    {
    char line[MAXLINE];
    long lineno=0;//行号
    char c;
    int except,number,found;

    except=number=found=0;

    while(--argc>0 && (*++argv)[0]=='-')//检查第一个(argc=2)字符串的首个字符是否为'-'号
    {// 注意:::(*++argv)[0]
    // *++argv[0]==*(++argv[0]) 的区别

    while( c=*++argv[0] )//检查'-'后的下一个字符
    {
    switch(c){
    case 'x':
    except=1;//如有参数,设置相应参数的状态作上标志
    break;
    case 'n':
    number=1;
    break;
    default:
    printf("illegal optiion %cn",c);
    argc=0;
    found=-1;
    break;
    }
    }
    }

    if(argc!=1) //剩下一个模式字符串,所以argc的个数就为1
    printf("Usage:find -x -n patternn");
    else
    while(getline(line,MAXLINE)>0)
    {
    lineno++;
    if( ( (strstr(line,*argv) !=NULL))!=except)//如果不匹配,则打印出来
    {
    if(number)
    printf("%ld:",lineno);
    printf("%s",line);
    found++;
    }
    }
    return found;

    }

    int getline(char *line,int max)
    {
    int i=0;
    char ch;

    while( (ch=getchar())!=EOF && i
    {
    *(line+i)=ch;
    i++;
    }
    if(ch=='n')
    *(line+i++)='n';
    *(line+i)='';
    return i;
    }

相关内容
赞助商链接