Нужно Модернизировать Программу.(язык С)

Тема в разделе "C/C++/C#", создана пользователем Ekaterina1, 13 янв 2013.

  1. Ekaterina1

    Ekaterina1 New Member

    Регистрация:
    13 янв 2013
    Сообщения:
    1
    Симпатии:
    0
    Посмотреть существующий код(по возможности сделать его более человеческим),и модифицировать подпрограмму чтения таким образом, чтобы символы '|', '<'и '>' воспринимались с наряду уже имеющимся с предыдущей работы символом '&' как разделительные. Реализовать перенаправления стандартных потоков ввода и вывода. Используя системные вызовы open, close, read, write, dup, dup2.

    есть программа, которая работает в качестве командного интерпритатора, на доработать её так что бы стандартным потоком ввода и вывод из файла, например при команта ls > fail записывала туда состоянии директории, а при команде < fail использовала поток ввода для этой команы из файла.
    <!--shcode--><pre><code class='c'>#include <stdio.h>

    #include <stdlib.h>

    #include <string.h>

    #include <unistd.h>

    #include <fcntl.h>

    #include <sys/stat.h>

    #include <sys/types.h>

    #include <sys/wait.h>



    //struktura dlya simvola

    struct simvol

    {

    char a;

    struct simvol *next;

    };



    //struktura dlya slova

    struct slovo

    {

    char *a;

    struct slovo *next;

    };





    struct simvol *sim, *first=NULL;

    struct slovo *slo, *g, *slo2=NULL;

    char *str=NULL;



    //funk. dlya perenosa simvola v strukturu///////

    void sb(int p)

    {

    sim=(struct simvol*)malloc(sizeof(struct simvol));

    (*sim).a=p;

    (*sim).next=first;

    first=sim;

    }

    /////////////////////////////////////////////////



    //videlenie pamyati pod massiv simvolov/////////

    void al(int n)

    {

    str=(char *)malloc(sizeof(char)*(n+1));

    str[n]='\0';

    n--;



    while(first!=NULL)

    {

    str[n]=(*first).a;

    sim=(*first).next;

    free(first);

    first=sim;

    n--;

    }

    }

    //////////////////////////////////////////////////



















    //funk. dlya perenosa slova v strukturu slov//////

    void hm(int n)

    {

    slo=(struct slovo*)malloc(sizeof(struct slovo));

    slo->a=str;

    slo->next=slo2;

    slo2=slo;

    }

    //////////////////////////////////////////////////



    //funktsiya ochishaet pamyat' ot massiva slov i spiska slov

    void udal(char **v, int m)

    {

    free(v);

    slo2=g;

    while(slo2!=NULL)

    {

    slo=slo2->next;

    //printf("%s\n", slo2->a);

    free(slo2->a);

    free(slo2);

    slo2=slo;

    }

    }

    //////////////////////////////////////////////////





    /////////////////////main/////////////////////////

    int main()

    {

    int p, c; //simvol

    int n, m; //schyotchoki

    int l=0; //flag

    char **v=NULL;



    n=0;

    int k=0;

    printf("->");



    while((p=getchar())!=EOF)

    {

    if((p!=' ')&&(p!='\n')&&(p!='&'))

    {

    l=0;

    sb(p); //sozdayot strukturu s bukvoy

    n++;

    }



    if(((p==' ')||(p=='\n')||(p=='&'))&&(l==0))

    {

    l=1;

    al(n); //videlenie pamyati pod massiv simvolov

    n=0;

    hm(n); //funk. dlya perenosa slova v strukturu slov

    k++;

    }



    if(p=='\n')

    {

    m=k;

    v=(char**)malloc(sizeof(char*)*(k+1));

    v[k]='\0';

    k--;

    g=slo2;

    while(slo2!=NULL)

    {

    slo=slo2->next;

    v[k]=slo2->a;

    slo2=slo;

    k--;

    }

    printf("->");

    if(strcmp("cd", v[0])==0)

    chdir(v[1]);



    else

    {

    pid_t pid = fork();

    if (!pid)

    {

    execvp(v[0], v);

    printf("ups");

    exit(-1);

    }

    }



    if(c=='&')

    {

    pid_t cpid = wait3(NULL, WNOHANG, NULL);//getpid();

    cpid=getpid();

    printf("ID process = %d\n->", cpid);

    wait3(NULL, WNOHANG, NULL);

    }

    else

    {

    wait(NULL);

    }

    udal(v, m); //funktsiya ochishaet pamyat' ot massiva slov i spiska slov

    }

    if(p=='\n')

    k=0;

    c=p;

    if((c=='&')&&(p!='\n'))

    printf("Karaul!\n");

    }

    g=NULL;

    return 0;

    }[/CODE]
     
Загрузка...
Похожие Темы - Нужно Модернизировать Программу
  1. Bafomet
    Ответов:
    0
    Просмотров:
    18
  2. MaxP
    Ответов:
    1
    Просмотров:
    56
  3. kuklofon
    Ответов:
    12
    Просмотров:
    591
  4. rownong
    Ответов:
    1
    Просмотров:
    201
  5. slavkan777
    Ответов:
    0
    Просмотров:
    441

Поделиться этой страницей