usando o shell a partir de programa em C

2001-06-20 Thread Jackson Gois

Oi pessoal

   Gostaria de saber dos experts de plantao como fazer para usar comandos 
do shell durante a execucao de um programa em C. Ja tentei o execl() mas 
nao deu certo. A sintaxe que usei foi :

   execl("/bin/rm", "rm", "-rf", nome_do_arquivo, 1)

Onde foi que eu errei ? 
Agradeco antecipadamente a ajuda.(ah, uso o bash...)


  Jackson Gois

   [EMAIL PROTECTED]
   [EMAIL PROTECTED]



Re: usando o shell a partir de programa em C

2001-06-20 Thread Gustavo Noronha Silva
Em Wed, 20 Jun 2001 17:24:40 -0300 (EST)
Jackson Gois <[EMAIL PROTECTED]> escreveu:

> Oi pessoal
Olá =)

>Gostaria de saber dos experts de plantao como fazer para usar comandos 
> do shell durante a execucao de um programa em C. Ja tentei o execl() mas 
> nao deu certo. A sintaxe que usei foi :
longe de mim ser especialista =) mas acho que o certo seria

execl("/bin/rm", "rm", "-rf", "/tmp/arquivo", NULL);

seria melhor se você mandasse o erro que tá dando... eu uso um jeito
diferente no meu programa gkdial... se quiser dar uma olhada:

deb-src http://people.debian.org/debian stable/

apt-get source gkdial

no arquivo actions.c a função gk_exec()... mas se o que você
quer fazer é realmente apagar um arquivo, é uma grande mancada
usar um comando de shell heheh muito feioso... use a função
unlink(2)

/me se lembra quando usou (no mesmo gkdial) a função system()
pra executar o rm em arquivos... *sigh*

[]s!

-- 
Gustavo Noronha Silva - kov 
**
|  .''`.  | Debian GNU/Linux: |
| : :'  : | Debian BR...:  |
| `. `'`  |  Be Happy! Be FREE!  |
|   `-| "Think globally, act locally!"   |
**



Re: usando o shell a partir de programa em C

2001-06-20 Thread Christoph Simon
On Wed, 20 Jun 2001 17:24:40 -0300 (EST)
Jackson Gois <[EMAIL PROTECTED]> wrote:

> 
> Oi pessoal
> 
>Gostaria de saber dos experts de plantao como fazer para usar comandos 
> do shell durante a execucao de um programa em C. Ja tentei o execl() mas 
> nao deu certo. A sintaxe que usei foi :
> 
>execl("/bin/rm", "rm", "-rf", nome_do_arquivo, 1)
> 
> Onde foi que eu errei ? 
> Agradeco antecipadamente a ajuda.(ah, uso o bash...)

A família das chamadas exec*() substituem o processo em execução. Se
você simplesmente faz isso, é o rm que vai correr em lugar do seu
programa (além do fato que a lista de argumentos deve ser acabada em
NULL; às vezes ajuda ler as páginas do manual).

Você tem duas opções. Pode usar fork() para criar outro processo e
chamar exec* no filho. Então o processo pai pode aguardar o resultado
disso e você ainda tem possibilidade de matar o processo filho por
exemplo no caso de um timeout. Mas o normal é usar system().


--
Christoph Simon
[EMAIL PROTECTED]
---
^X^C
q
quit
:q
^C
end
x
exit
ZZ
^D
?
help
shit
.



Re: usando o shell a partir de programa em C

2001-06-21 Thread Jackson Gois

Valeu pelas dicas. Serao muito uteis !!

Jackson



On Wed, 20 Jun 2001, Gustavo Noronha Silva wrote:

> Em Wed, 20 Jun 2001 17:24:40 -0300 (EST)
> Jackson Gois <[EMAIL PROTECTED]> escreveu:
> 
> > Oi pessoal
> Olá =)
> 
> >Gostaria de saber dos experts de plantao como fazer para usar comandos 
> > do shell durante a execucao de um programa em C. Ja tentei o execl() mas 
> > nao deu certo. A sintaxe que usei foi :
> longe de mim ser especialista =) mas acho que o certo seria
> 
> execl("/bin/rm", "rm", "-rf", "/tmp/arquivo", NULL);
> 
> seria melhor se você mandasse o erro que tá dando... eu uso um jeito
> diferente no meu programa gkdial... se quiser dar uma olhada:
> 
> deb-src http://people.debian.org/debian stable/
> 
> apt-get source gkdial
> 
> no arquivo actions.c a função gk_exec()... mas se o que você
> quer fazer é realmente apagar um arquivo, é uma grande mancada
> usar um comando de shell heheh muito feioso... use a função
> unlink(2)
> 
> /me se lembra quando usou (no mesmo gkdial) a função system()
> pra executar o rm em arquivos... *sigh*
> 
> []s!
> 
> -- 
> Gustavo Noronha Silva - kov 
> **
> |  .''`.  | Debian GNU/Linux: |
> | : :'  : | Debian BR...:  |
> | `. `'`  |  Be Happy! Be FREE!  |
> |   `-| "Think globally, act locally!"   |
> **
> 
> 
> --  
> To UNSUBSCRIBE, email to [EMAIL PROTECTED]
> with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]
> 
> 



  Jackson Gois

   [EMAIL PROTECTED]
   [EMAIL PROTECTED]



Re: usando o shell a partir de programa em C

2001-06-21 Thread Gustavo Noronha Silva
Em Thu, 21 Jun 2001 16:52:29 -0300 (EST)
Jackson Gois <[EMAIL PROTECTED]> escreveu:

> int unlink(const char *novo);
isso é uma declaração de função, você está aprendendo C agora
certo? dê uma estudada melhor sobre funções... o jeito certo de
usar é:

unlink ("/tmp/novo");

> Arquivo compilado beleza... Rodou na paz. Mas nao funcionou. meu arquivo 
> com nome de novo continua no meu diretorio. E se coloco o path 
> (/tmp/novo) o compilador nao aceita (parse error ou coisa do genero).
> Voce tem mais alguma sugestao ? Tenho certeza que eh so algum detalhe que 
> esta faltando. Mas como nao conheco os detalhes de C para o gcc e no man 
> nao especifica ...
o C é o mesmo pra tudo quanto é compilador... o man te dá as definições
das funções, cabe a você usá-las passando os valores corretos...

[]s!

ps: estou postando pra lista pq ela é um lugar melhor para discussão,
pvt não ajuda muito =)

-- 
Gustavo Noronha Silva - kov 
**
|  .''`.  | Debian GNU/Linux: |
| : :'  : | Debian BR...:  |
| `. `'`  |  Be Happy! Be FREE!  |
|   `-| "Think globally, act locally!"   |
**



Re: usando o shell a partir de programa em C

2001-06-26 Thread Jackson Gois

Ola kov, obrigado pela resposta. Acabei de testar a sua sugestao.
O programa foi compilado normalmente e rodou normalmente tambem, mas nao 
funcionou. Meu arquivo novo continua la. No man do unlink esta exatamente 
do jeito que eu coloquei abaixo

> > int unlink(const char *novo);
> isso é uma declaração de função, você está aprendendo C agora
> certo? dê uma estudada melhor sobre funções... o jeito certo de
> usar é:
> 
> unlink ("/tmp/novo");

Sera que falta algo em meu sistema ? Obrigado.

  Jackson Gois

   [EMAIL PROTECTED]
   [EMAIL PROTECTED]



Re: usando o shell a partir de programa em C

2001-06-26 Thread Gustavo Noronha Silva
Em Tue, 26 Jun 2001 14:45:19 -0300 (EST)
Jackson Gois <[EMAIL PROTECTED]> escreveu:

> Ola kov, obrigado pela resposta. Acabei de testar a sua sugestao.
> O programa foi compilado normalmente e rodou normalmente tambem, mas nao 
> funcionou. Meu arquivo novo continua la. No man do unlink esta exatamente 
> do jeito que eu coloquei abaixo
sim... no man está daquele jeito... aquilo se chama declaração, ou
"prototype" (protótipo)... é uma indicação de como a função deve
ser usada... por exemplo:

int funcao (char *nome);

isso significa que a função recebe uma string como argumento (char *nome)
e retorna um inteiro... então eu posso fazer:

int main()
{
int i;

i = funcao ("Gustavo");

return i;
}

sacou? estude melhor esse capítulo ;) onde você está aprendendo C?

> Sera que falta algo em meu sistema ? Obrigado.
provavelmente você está tendo algum erro de permissão ou não está
incluindo o header necessário... (dá um warning quando compila?)

a manpage me diz que você precisa dar um #include no 
faça o seguinte pra testar...

compile e execute esse programa:

-><
#include 
#include 
#include 

extern int errno;

int main()
{
if (unlink("/tmp/novo") == -1)
perror("erro");
else 
printf("arquivo apagado...\n");

return 0;
}
><--

se for problema de permissão você deve ver algo assim:

[EMAIL PROTECTED]/tmp] # ./t
erro: Operation not permitted
[EMAIL PROTECTED]/tmp] # ls -l novo
-rw-rw-r--1 root root0 Jun 26 15:50 novo

(./t foi o nome que dei pro prg aqui...)

[]s!

-- 
Gustavo Noronha Silva - kov 
**
|  .''`.  | Debian GNU/Linux: |
| : :'  : | Debian BR...:  |
| `. `'`  |  Be Happy! Be FREE!  |
|   `-| "Think globally, act locally!"   |
**