1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

[C] Exec-Servidor

Discussão em 'Programação' iniciada por JomarC, 21 de Junho de 2008. (Respostas: 13; Visualizações: 873)

  1. JomarC

    JomarC Power Member

    Ora boas srs. Engenheiros :)

    Precisava de uma ajudinha vossa!

    E o seguinte tenho um analisador (flex e bison)....e um servidor (linguagem C)...basicamente o que eu tava a pensar era sempre que um cliente se liga (faz fork) um queria fazer um exec em que chamava o analisador....nao sei se e o melhor procedimento, mas foi o que me surgiu! lol


    Como e que faço isso?

    Simulo o que escrevo na consola para correr o analisador?


    Desde ja um Obrigado

    Cumps
     
  2. imhotep

    imhotep What is folding?

    não percebi bem a tua pergunta

    explica melhor o cenário de utilização para te poder ajudar.


    mas o que queres é executar um "programa" depois de fazer um fork ?

    Cumprimentos
     
  3. JomarC

    JomarC Power Member

    Exactamente!

    Ou seja

    eu para correr o meu analisador tenho que escrever na consola:

    bison -d programa

    flex ....

    gcc....

    basicamente eu queria por isso num exec!

    não sei se e possivel..
     
  4. nasic

    nasic Power Member

    makefile?
     
  5. JomarC

    JomarC Power Member

    E assim eu tou a fazer algo parecido co isto:

    #define EXEC_ARG_0 ("./b") - bison
    #define EXEC_ARG_1 ("./f") - flex
    #define EXEC_ARG_2 ("./c") - gcc
    .
    .
    .

    void do_exec()
    {
    /* simply list the arguments in order */
    execlp(EXEC_ARG_0, EXEC_ARG_1,EXEC_ARG_2, NULL );

    }

    e depois do fork do cliente entrar em simplesmente faço:

    do_exec();

    A questao e que agora quando eu faço:

    ./teste<dados.txt>resultado.xml

    Este dados e ficheiro variavel....ou seja....tanto pode ser o dados.txt como o techzone.txt.....agora encalhei! lol
     
  6. _coelhinha_

    _coelhinha_ Power Member

    Sim se o que queres é por esses 3 comandos num executavel acho que a melhor opçao é um makefile ;)
     
  7. por que razao um makefile? n percebi... a ideia é chamar o exec com os tais parametros certo? logo nao se pode usar um makefile... tenho algumas duvidas se podes chamar assim o execlp... esses ./ é o pretendes ir buscar a consola??
     
  8. JomarC

    JomarC Power Member

    Exactamente!

    Os comandos em cima sao o que eu pretendo ir buscar para o executavel

    que makefile? Se desse com makefile ja tinha feito...
     
  9. mas nao podes chamar os 3 comandos ao mesmo tempo... primeiro um execl termina a execucao do processo logo é necessario que o execl seja executado num filho...depois o que podes fazer é executar o primeiro programa se executar mandas fazer o segundo se executar mandas fazer o terceiro...podes fazer isso com o wait() ou waitpid()...
    n sei se percebi bem se é isto que pretendes
     
  10. JomarC

    JomarC Power Member

    acho q ja percebi a coisa...do tipo

    os comandos:

    bison -d....

    flex....

    gcc....

    faxo na consola....e gero o executavel.....do tipo ./teste<dados.txt

    e no exec do servidor chamo so o executavel em cima..

    e ja so preciso de fazer um execl

    como e que eu chamo o execl?

    execlp(...); ??
     
  11. eu em servidores percebo pouco...sei chamar em linux...o k sera parecido ou igual

    execlp(localizacao do programa,argumento1,argumento2,NULL);
     
  12. JomarC

    JomarC Power Member

    E igual meu! lol

    o que puses te eu ka sei :) da ai um exemplo da localizaçao e dos argumentos...lol

    faz de conta que o comando a chamar e mesmo este:

    ./teste<dados.txt
     
  13. primeiro porque estas a redirecionar ?
    se posse para redirecionar a saida para um ficheiro teria que ser ao contrario a <
    isso n te vai dar erro?

    tipo o programa tera que estar em algum lado ...imaginado /usr/bin/teste1 por exemplo(pode ser tambem esse ./ acho)

    assumindo que ele tem um parametro -h em que chama a ajuda do programa...
    sera algo do tipo
    execlp("/usr/bin/teste1","-h",NULL);
    se n tiver qualquer tipo de argumentos fica so:
    execlp("/usr/bin/teste1",NULL);
     
  14. JomarC

    JomarC Power Member

    Estou a redirecionar pelo seguinte:

    Do cliente vem um url....do tipo /home/datafolder/ola.txt

    Eu abro esse o url e mando o todo o conteudo para o ficheiro dados.txt....porque?

    Porque pode ser qq url....e assim o dados.txt tem sempre o conteudo do url recebido e e sempre o mesmo ficheiro analisar.

    E depois do parser vai la gerar um ficheiro XML

    Obrigado pela explicaçao do exec :)
     

Partilhar esta Página