QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 948|回复: 9

[gcc编程]请进。

[复制链接]
发表于 2003-2-26 14:31:44 | 显示全部楼层 |阅读模式
设想:

[code:1]

[root@localhost /root] #程序1[回车]

STEP1-使用者输入[某目录]
        |
        V
STEP2-通过“system();”调用程序“ls”,执行命令“ls -al "某目录"”
        |
        V
STEP3-把应当显示在屏幕上的内容灌入“程序1”内一个空的字符数组

[/code:1]

谁能帮忙做出来?
我把S2的结果写入临时文件“/tmp/asd/ls.txt”,然后由“程序1”读取。但是我相信有更好的办法。我不希望用临时文件。
 楼主| 发表于 2003-2-26 16:50:53 | 显示全部楼层
暂存

[code:1]
本人在做一个工具,设想以如下方式实现:

[root@localhost /root] #程序1[回车]

STEP1-使用者输入[某目录]
        |
        V
STEP2-通过“system();”调用程序“ls”,执行命令“ls -al "某目录"”
        |
        V
STEP3-把应当显示在屏幕上的内容灌入“程序1”内一个空的字符数组,由“程序1”对其加工后再输出到屏幕。


谁能帮忙做出来?
已经做出来的版本在(2003年7月注:此链接已经失效)
http://www.linuxfans.org/nuke/modules.php?name=Site_Downloads&op=geninfo&did=330
我把S2的结果写入临时文件“/tmp/asd/ls.txt”,然后由“程序1”读取。代码有点乱,没有按一般规则缩进,因为层次太多了。但主要部分之间都用注释间隔开了。代码位于“/root/.A/src”(装好后)。

我相信有更好的办法。我不希望用临时文件。

程序功能草图如下:
ASD——A-SIMPLE-DESK
|
+-AFM——目录浏览器
| |
| +-显示当前目录
| +-上下翻页
| +-返回上级目录
| +-新建目录
| +-选择文件(类似剪贴板)
| +-常规文件操作
| | |
| | +复制
| | +移动
| | +链接
| | +删除
| |
| +-权限设定(还没有)
|
+-命令行(调用shell,极不完善)
+-执行常用程序的快捷菜单(还没有)
+-设置(还没有)
[/code:1]
回复

使用道具 举报

发表于 2003-2-26 17:55:56 | 显示全部楼层
[code:1]
//用管道方法
#include <stdio.h>

main()
{
        FILE *fp;
        char dirPath[1024];
        char command[1024];
        char line[1024];

        printf("Input Dir:");

        scanf("%s",dirPath);
        sprintf(command,"ls -al %s",dirPath);

        fp=popen(command,"r");
        if(!fp)
        {
                printf("error!\n");
                exit(1);
        }
        while(fgets(line,sizeof(line),fp))
        {
                printf("%s",line);
        }
        pclose(fp);

}
//while循环里的line就是ls命令输出的行(用while循环打印出所有行),往后的应该没问题了吧
[/code:1]
回复

使用道具 举报

 楼主| 发表于 2003-2-28 19:03:25 | 显示全部楼层
非常感谢。我会试试。

另外,在chinaunix.net,经人指点得到一个方法,用来写一个类似“ls”的程序。

[code:1]
#include<stdio.h>
#include<sys/types.h>
#include<dirent.h>
#include<unistd.h>

main()
{
    //============
    //定义
    DIR *dir;
    struct dirent *ptr;
    char c1;
    char szPath[300];
    char get[300];
    int i1;
    //============

    //============
    //初始化
    for(i1=0;i1<300;i1++)
    {
        szPath[i1]=get[i1]=0;
    }
    printf("请输入路径:\n");
    //============

    //============
    //给get[]赋值(不要见笑,今后这个数组将不是这样赋值)
    do
    {
        c1=getchar();
        if(c1=='\n')
        {
            break;
        }
        else
        {
            get[i1]=c1;
        }
    }
    //============

    //============
    //把get[]的值赋给szPath[]
    for(i1=0;get[i1]!=0;i1++)
    {
        szPath[i1]=get[i1];
    }
    //============

    //============
    //打开目录
    dir=opendir(szPath)
    while((direntp = readdir(dirp)) != NULL)
    {
        printf("%s\n",ptr->d_name);//按照书上所说,d_name不必再进行定义了。是头文件定义的结构体成员,存放目录名。
    }
    closedir(dir);
    //============
}
[/code:1]


手头暂时没有Linux机器,能帮忙测试一下吗?
回复

使用道具 举报

发表于 2003-3-2 06:42:49 | 显示全部楼层
这个程序真奇怪.
1.ls是不需要和用户交互的,目录应该由命令行参数指定.
2.有do没有while,语法错误,
3.为什么声明szPath和get两个字符数组,一个就够了.
4.字符数组初始化,输入,复制的代码都很奇怪,可以象如下这样:
    4.1 char szPath[300] = "";
    4.2 fgets(get, 300, stdin);
    4.3 strcpy(szPath, get);
回复

使用道具 举报

 楼主| 发表于 2003-3-3 22:19:39 | 显示全部楼层
确实错了,不过修改修改就能用了。程序已经写好了。谢谢关注。
回复

使用道具 举报

 楼主| 发表于 2003-3-7 17:10:21 | 显示全部楼层
暂时存放:

[code:1]
基本框架

#define X 121
#define Y 22
#include<stdio.h>
main()
{
//>>>TEMP-USE
    int x=46; int y=16;

//>>>FOR SCREEN
    char ash[X][Y];

//>>>TEMPRORY
    int i1,i2;

//>>>FOR MAIN CYCLE
    char c1;

//>>>FOR FILE MANAGE
    char c2;

    printf("FIRST-DO\n");

//>>>START MAIN CYCLE
    do
    {
    //>>>START MAIN OPERATING INTERFACE
        printf("MAIN OPERATE INTERFACE\n");
        printf("[1:文件管理|FILEMANAGE]\n");
        printf("[0:离开    |EXIT      ]\n");
    //<<<FINISH MAIN OPERATING INTERFACE

    //>>>GET OPERATING CHARACTER
        c1=getchar();
    //<<<GET OPERATING CHARACTER

    //>>>START DEAL WITH "c1"
        if(c1=='1')
        {
            do
            {
            //>>>START FILEMANAGE OPERATING INTERFACE
                {
                    for(i2=0;i2<y;i2++)
                    {
                        for(i1=0;i1<x;i1++)
                            ash[i2][i1]='#';
                        ash[i2][i1]='\n';
                    }
                }
            //<<<FILEMANAGE OPERATING INTERFACE

            //>>>PRINTF INTERFACE TO SCREEN
                {
                    for(i2=0;i2<y;i2++)
                    {
                        printf("\n");
                        for(i1=0;i1<x;i1++)
                            printf("%c",ash[i2][i1]);
                    }
                }
            //<<<FINISH PRINTF INTERFACE TO SCREEN

            //>>>GET OPERATING CHARACTER
                c2=getchar();
            //<<<GET OPERATING CHARACTER

            //>>>DEAL WITH "c2"
            //<<<DEAL WITH "c2"
            }
            while(c2!='A'&&c2!='a');
        }
    //<<<DEAL WITH "c1"
    }
    while(c1!='0');
//<<<MAIN CYCLE
}
[/code:1]
回复

使用道具 举报

 楼主| 发表于 2003-3-7 17:21:38 | 显示全部楼层

暂时存放一段代码

[code:1]
#define X 121
#define Y 22
#include<stdio.h>
main()
{
//>>>TEMP-USE
        int x=46; int y=16;

//>>>FOR SCREEN
        char ash[Y][X];

//>>>TEMPRORY
        int i1,i2;

//>>>FOR ALL
        char lgg='C';//Language

//>>>FOR MAIN CYCLE
        char c1;

//>>>FOR FILE MANAGE
        char fmtxc1[16]="  ASD-???????í  ";
        char fmtxe1[16]=" ASD-FILEMANAGE ";
        char fmtxc2[7]=" ?÷???¨";
        char fmtxe2[7]="CONSOLE";
        char fmtxc3[7]=" ?· ?ú ";
        char fmtxe3[7]=" UN-DO ";
        char fmtxc4[10]="?±?°?·????";
        char fmtxe4[10]="NOWA-PATH:";
        char fmtxc5[24]="?ò?? ?????à±? ??????????";
        char fmtxe5[24]=" NUM FILETYPE SELECTIONS";
        char fmtxc6[10]="??????????";
        char fmtxe6[10]="SELECTED  ";
        char fmtxc7[6]=" ?? ??";
        char fmtxe7[6]="DETALE";
        char fmtxc8[6]="??????";
        char fmtxe8[6]=" PAGE:";
        char c2;

        printf("FIRST-DO\n");
//>>>MAIN CYCLE
        do
        {
        //>>>MAIN OPERATING INTERFACE
                printf("MAIN OPERATE INTERFACE\n");
                printf("[1:???????í|FILEMANAGE]\n");
                printf("[0:????    |EXIT      ]\n");
        //<<<MAIN OPERATING INTERFACE

        //>>>OPERATING CHARACTER
                c1=getchar();
        //<<<OPERATING CHARACTER

        //>>>DEAL WITH "c1"
                if(c1=='1')
                {
                        do
                        {
                        //>>>FILEMANAGE OPERATING INTERFACE
                                for(i2=0;i2<y;i2++)
                                {
                                        ash[i2][0]='\n';
                                        for(i1=1;i1<x+1;i1++)
                                                ash[i2][i1]=' ';
                                }
                                //===========
                                for(i2=0;i2<3;i2++)
                                {
                                        ash[i2][x/2-9]=ash[i2][x/2+9]='<';
                                        ash[i2][x/2-8]=ash[i2][x/2+10]='>';
                                }
                                {
                                        ash[1][1]=ash[1][x-1]=ash[4][1]=ash[4][x-1]=ash[y-1][1]=ash[y-1][x-1]='<';
                                        ash[1][2]=ash[1][x]=ash[4][2]=ash[4][x]=ash[y-1][2]=ash[y-1][x]='>';
                                }
                                //============
                                for(i1=x/2-7;i1<x/2+9;i1++)
                                        ash[0][i1]=ash[2][i1]='=';
                                for(i1=3;i1<x/2-9;i1++)
                                        ash[1][i1]='=';
                                for(i1=x/2+11;i1<x-1;i1++)
                                        ash[1][i1]='=';
                                for(i1=3;i1<x-1;i1++)
                                        ash[4][i1]='=';
                                for(i1=3;i1<6;i1++)
                                        ash[y-1][i1]='=';
                                for(i1=x-4;i1<x-1;i1++)
                                        ash[y-1][i1]='=';
                                //============
                                ash[2][1]=ash[3][1]=ash[2][2]=ash[3][2]='|';
                                ash[2][x-1]=ash[3][x-1]=ash[2][x]=ash[3][x]='|';
                                for(i2=5;i2<y-1;i2++)
                                        ash[i2][1]=ash[i2][2]=ash[i2][x/2+6]=ash[i2][x-1]=ash[i2][x]='|';
                                //============
                                ash[2][3]=ash[2][x-12]='[';
                                        ash[2][5]=ash[2][x-10]=':';
                                                ash[2][13]=ash[2][x-2]=']';
                                ash[6][12]=ash[6][x/2+8]='[';
                                        ash[6][14]=ash[6][x/2+10]=':';
                                                ash[6][22]=ash[6][x/2+18]=']';
                                for(i2=7;i2<y-4;i2++)
                                {
                                        ash[i2][4]='[';ash[i2][6]=']';
                                }
                                ash[y-3][4]=ash[y-2][4]='[';
                                        ash[y-3][6]=ash[y-2][6]=':';
                                                ash[y-3][15]=ash[y-2][15]=']';
                                for(i2=y-4;i2<y-1;i2++)
                                {
                                        ash[i2][17]='[';ash[i2][19]=':';ash[i2][28]=']';
                                }
                                ash[y-4][x/2+7]='[';
                                        ash[y-4][x/2+9]=':';
                                                ash[y-4][x/2+21]=']';
                                ash[y-1][6]='[';ash[y-1][x-5]=']';
                                //============
                                if(lgg=='C')
                                {
                                        for(i1=0;i1<16;i1++)
                                                ash[1][x/2-7+i1]=fmtxc1[i1];
                                        for(i1=0;i1<7;i1++)
                                                ash[2][6+i1]=fmtxc2[i1];
                                        for(i1=0;i1<7;i1++)
                                                ash[2][x-9+i1]=fmtxc3[i1];
                                        for(i1=0;i1<10;i1++)
                                                ash[3][3+i1]=fmtxc4[i1];
                                        for(i1=0;i1<25;i1++)
                                                ash[5][3+i1]=fmtxc5[i1];
                                        for(i1=0;i1<10;i1++)
                                                ash[5][x/2+8+i1]=fmtxc6[i1];
                                        for(i1=0;i1<6;i1++)
                                                ash[6][15+i1]=ash[6][x/2+11+i1]=fmtxc7[i1];
                                        for(i1=0;i1<6;i1++)
                                                ash[y-4][3+i1]=fmtxc8[i1];               
                                }
                                else
                                {
                                        for(i1=0;i1<16;i1++)
                                                ash[1][x/2-7+i1]=fmtxe1[i1];               
                                        for(i1=0;i1<7;i1++)
                                                ash[2][6+i1]=fmtxe2[i1];               
                                        for(i1=0;i1<7;i1++)
                                                ash[2][x-9+i1]=fmtxe3[i1];               
                                        for(i1=0;i1<10;i1++)
                                                ash[3][3+i1]=fmtxe4[i1];               
                                        for(i1=0;i1<25;i1++)
                                                ash[5][3+i1]=fmtxe5[i1];               
                                        for(i1=0;i1<10;i1++)
                                                ash[5][x/2+8+i1]=fmtxe6[i1];               
                                        for(i1=0;i1<6;i1++)
                                                ash[6][15+i1]=ash[6][x/2+11+i1]=fmtxe7[i1];               
                                        for(i1=0;i1<6;i1++)
                                                ash[y-4][3+i1]=fmtxe8[i1];               
                                }
                        //<<<FILEMANAGE OPERATING INTERFACE

                        //>>>PRINTF INTERFACE TO SCREEN
                                printf("\n\n\n\n\n\n\n\n");
                                for(i2=0;i2<y;i2++)
                                {
                                        for(i1=0;i1<x+1;i1++)
                                                printf("%c",ash[i2][i1]);
                                }
                                for(i1=0;i1<x-6;i1++)
                                        printf("\b");
                        //<<<PRINTF INTERFACE TO SCREEN

                        //>>>GET OPERATING CHARACTER
                                c2=getchar();
                        //<<<GET OPERATING CHARACTER

                        //>>>DEAL WITH "c2"
                        //<<<DEAL WITH "c2"
                        }
                        while(c2!='A'&&c2!='a');
                }
        //<<<DEAL WITH "c1"
        }
        while(c1!='0');
//<<<MAIN CYCLE
}
[/code:1]
回复

使用道具 举报

发表于 2003-3-8 20:30:04 | 显示全部楼层
兄弟你应该试试管道的方法,它比第二种方法高明多了。
回复

使用道具 举报

 楼主| 发表于 2003-3-11 21:22:26 | 显示全部楼层

暂时存放

[code:1]
#define R 54
#include <stdio.h>
main()
{
        FILE *afmp;
        char asdls[1000000];
        char cmd[8];
        char line[1000];
        char path[1000];

        int page=0,pgmx,npp;

        int i1,i2,i3,i4;

char import[1000]="/tarenauser/typhoon";

page=0; npp=5;

for(i4=0;import[i4]!=0;i4++);
        path[i4]=import[i4];

        //scanf("%s",path);
        sprintf(cmd,"ls -AlF %s",path);
        afmp=popen(cmd,"r");
        if(!afmp)
        {
                printf("error!\n");
                        exit(1);
        }

        for(i1=0;i1<1000000;i1++)
                asdls[i1]=0;
        i1=0;i3=0;//TOTAL行标记
        while(fgets(line,sizeof(line),afmp))
        {
                if(i3!=0)//丢弃“TOTAL行”
                {
                        for(i2=R;line[i2]!='\n';i2++)
                        {
                                if(line[i2]==' ')
                                {
                                        line[i2]='\"';
                                        break;
                                }
                        }
                        for(i2=i2;line[i2]!='\n';i2++)
                        {
                                if(line[i2]=='>')
                                        if(line[i2-2]==' '&&line[i2-1]=='-'&&line[i2+1]==' ')
                                        {
                                                line[i2-2]=line[i2+1]='\"';
                                                break;
                                        }
                                i2++;
                        }
                        printf("%s",line);
                        //for(i2=0;line[i2]!='\n';i2++)
                        //{
                        //        asdls[i1]=line[i2];
                        //        i1++;
                        //}
                        //asdls[i1]='\"';i1++;
                        //asdls[i1]='\n';i1++;
                }
                i3=1;
        }
        //printf("%s",asdls);
        pclose(afmp);
}
[/code:1]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-16 08:21 , Processed in 0.070189 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表