Autor Tópico: Duvida com um Programa em C  (Lida 6618 vezes)

Offline Diego_Rocha

  • Usuário Ubuntu
  • *
  • Mensagens: 372
  • Slackware current
    • Ver perfil
Duvida com um Programa em C
« Online: 28 de Abril de 2007, 17:55 »
Pessoal é o seguinte eu queria saber por que a bendita função system() nao esta querendo funcionar se alguem tiver ideia fico grato, obrigado t+++

Código: [Selecionar]
#ifndef _BACK_
#define _BACK_

#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>

typedef struct _dir {
char *current_dir;
int len;
}_DIR;

int
main ()
{
  _DIR *dir = (_DIR *)malloc(sizeof(_DIR));
  dir->current_dir = (char *)get_current_dir_name();

  dir->len = strlen(dir->current_dir);

  for (dir->len; dir->len >= 0; dir->len--){
  if ( dir->current_dir[dir->len] == '/' )
  break;
  dir->current_dir[dir->len] = '\0';
  }
  char cmd[dir->len + 4];
  sprintf(cmd,"cd %s", dir->current_dir);

  system(cmd);

  return 0;
}
#endif

Offline FOKA

  • Usuário Ubuntu
  • *
  • Mensagens: 54
    • Ver perfil
Re: Duvida com um Programa em C
« Resposta #1 Online: 30 de Abril de 2007, 05:48 »
eu ainda nao conheço essa funçao mas vc nao esta infringindo nenhuma regra dela??

nao e system("cmd") ??
« Última modificação: 30 de Abril de 2007, 05:51 por FOKA »

Offline s4suk3

  • Usuário Ubuntu
  • *
  • Mensagens: 78
    • Ver perfil
Re: Duvida com um Programa em C
« Resposta #2 Online: 30 de Abril de 2007, 07:23 »
Existe o comando cmd em Linux?
Mas é como o FOKA falou:
system("ping 127.0.0.1");
system("killall -9 nautilus);
E por aí vai.
Boa sorte com seu projeto :)
Pentium 4 2.8ghz - 512 RAM DDR 400Mhz -  2 HDs 20gb 7200rpm IDE - Radeon 9200 PRO 128/64 - Arch Linux 2007.09 "Core Dump"
-
Humor, Linux, Software Livre e o resto :P
http://sryche.wordpress.com

Offline FOKA

  • Usuário Ubuntu
  • *
  • Mensagens: 54
    • Ver perfil
Re: Duvida com um Programa em C
« Resposta #3 Online: 30 de Abril de 2007, 13:25 »
nao e terminal?

Offline Diego_Rocha

  • Usuário Ubuntu
  • *
  • Mensagens: 372
  • Slackware current
    • Ver perfil
Re: Duvida com um Programa em C
« Resposta #4 Online: 30 de Abril de 2007, 14:50 »
Citar
char cmd[dir->len + 4];
  sprintf(cmd,"cd %s", dir->current_dir);

cmd é uma variavel, e quando voce passa uma variavel para o comando system() não se usa aspas, por exemplo, char cmd = "echo teste", system(cmd); isso seria equivalente a system("echo teste"), a diferença é que no primeiro exemplo passei uma variavel ao comando system(); no mais obrigado pela tentativa t++

Offline FOKA

  • Usuário Ubuntu
  • *
  • Mensagens: 54
    • Ver perfil
Re: Duvida com um Programa em C
« Resposta #5 Online: 30 de Abril de 2007, 15:35 »
ah me desculpa e k ainda estou a introduzir a linguagem por isso e um bocado complicado ajudar:P

Offline tfmoraes

  • Usuário Ubuntu
  • *
  • Mensagens: 441
    • Ver perfil
Re: Duvida com um Programa em C
« Resposta #6 Online: 30 de Abril de 2007, 17:16 »
Veja o que eu retirei do manual deste comando, via man:

DESCRIPTION
       system()  executes  a command specified in command by calling /bin/sh
       -c command, and returns after the command has been completed.  During
       execution  of  the  command,  SIGCHLD will be blocked, and SIGINT and
       SIGQUIT will be ignored.

RETURN VALUE
       The value returned is -1 on error  (e.g.   fork()  failed),  and  the
       return status of the command otherwise.  This latter return status is
       in the format specified in wait(2).  Thus, the exit code of the  com-
       mand  will be WEXITSTATUS(status).  In case /bin/sh could not be exe-
       cuted, the exit status will be that of a command that does exit(127).

       If  the  value  of  command is NULL, system() returns non-zero if the
       shell is available, and zero if not.

       system() does not affect the wait status of any other children.

Offline Diego_Rocha

  • Usuário Ubuntu
  • *
  • Mensagens: 372
  • Slackware current
    • Ver perfil
Re: Duvida com um Programa em C
« Resposta #7 Online: 30 de Abril de 2007, 19:52 »
Veja o que eu retirei do manual deste comando, via man:

DESCRIPTION
       system()  executes  a command specified in command by calling /bin/sh
       -c command, and returns after the command has been completed.  During
       execution  of  the  command,  SIGCHLD will be blocked, and SIGINT and
       SIGQUIT will be ignored.

RETURN VALUE
       The value returned is -1 on error  (e.g.   fork()  failed),  and  the
       return status of the command otherwise.  This latter return status is
       in the format specified in wait(2).  Thus, the exit code of the  com-
       mand  will be WEXITSTATUS(status).  In case /bin/sh could not be exe-
       cuted, the exit status will be that of a command that does exit(127).

       If  the  value  of  command is NULL, system() returns non-zero if the
       shell is available, and zero if not.

       system() does not affect the wait status of any other children.


Sim cara eu ja li o man varias vezes o problema é o seguinte não sai erro nenhum, ja passei o valor do comando para uma variavel e sai 0, quer disser o comando é executado com sucesso o problema é que o diretorio não muda,

Offline tfmoraes

  • Usuário Ubuntu
  • *
  • Mensagens: 441
    • Ver perfil
Re: Duvida com um Programa em C
« Resposta #8 Online: 01 de Maio de 2007, 16:15 »
Tente fazer o comando desejado no console, exemplo:

/bin/sh -c cd Downloads

Ele não muda de diretório. Mas com o comando ls -l ele funciona.

Offline Diego_Rocha

  • Usuário Ubuntu
  • *
  • Mensagens: 372
  • Slackware current
    • Ver perfil
Re: Duvida com um Programa em C
« Resposta #9 Online: 01 de Maio de 2007, 21:52 »
desculpa não entendi;

Offline tfmoraes

  • Usuário Ubuntu
  • *
  • Mensagens: 441
    • Ver perfil
Re: Duvida com um Programa em C
« Resposta #10 Online: 02 de Maio de 2007, 21:16 »
No man do comando system está escrito que ele executa o comando passado no argumento do seguinte jeito:

/bin/sh -c Comando

Ou seja, se o argumento do system for o comando "ps", ele executará assim:

/bin/sh/ -c ps

Offline mientefuego

  • Usuário Ubuntu
  • *
  • Mensagens: 56
    • Ver perfil
Re: Duvida com um Programa em C
« Resposta #11 Online: 03 de Maio de 2007, 15:24 »
Não usa system não...

Parece frescura, mas é deselegante pacas.

Faz o seguinte:

1. Cria um array de char* 's, estatica ou dinamicamente, você que sabe; fica mais bonito dinamicamente.

2. Pega a string de comando q cmd recebe, separa cada palavra em um dessas posições do array. Para isso você pode usar a função strtok, usando como token a string " " (espaço) que tá na biblioteca string.h, que você já incluiu no seu programa.

Esses passos de cima você pode fazer em uma função separada, até prá ficar mais bonito.

3. Na main, se necessário, usa a chamada de sistema fork prá criar um novo processo, e waitpid para o pai esperar a execução do processo-filho.

4. Agora a parte necessária: chame execvp(args[0], args, NULL) para executar o processo novo.

Se você usar o passo 3, colocar isso dentro de um loop infinito ("while(1)"), e implementar entrada via teclado você já tem um micro-shell :D

Offline Diego_Rocha

  • Usuário Ubuntu
  • *
  • Mensagens: 372
  • Slackware current
    • Ver perfil
Re: Duvida com um Programa em C
« Resposta #12 Online: 05 de Maio de 2007, 16:50 »
Não usa system não...

Parece frescura, mas é deselegante pacas.

Faz o seguinte:

1. Cria um array de char* 's, estatica ou dinamicamente, você que sabe; fica mais bonito dinamicamente.

2. Pega a string de comando q cmd recebe, separa cada palavra em um dessas posições do array. Para isso você pode usar a função strtok, usando como token a string " " (espaço) que tá na biblioteca string.h, que você já incluiu no seu programa.

Esses passos de cima você pode fazer em uma função separada, até prá ficar mais bonito.

3. Na main, se necessário, usa a chamada de sistema fork prá criar um novo processo, e waitpid para o pai esperar a execução do processo-filho.

4. Agora a parte necessária: chame execvp(args[0], args, NULL) para executar o processo novo.

Se você usar o passo 3, colocar isso dentro de um loop infinito ("while(1)"), e implementar entrada via teclado você já tem um micro-shell :D

E ai mientefuego, obrigado por tentar me ajudar o problema é que não tenho nem ideia de como fazer isso tudo que voce falou, se voce pudesse me dar um exemplo ficaria grato t++

Offline jniltinho

  • Usuário Ubuntu
  • *
  • Mensagens: 47
  • *****
    • Ver perfil
Duvida com um Programa em C
« Resposta #13 Online: 13 de Maio de 2007, 17:18 »
Estou tentado usar o glade 2 para gerar codigo em C para o taizan, mas quando eu executo o taizan já compilado em C não aparece os icones

Como eu faço para o C puscar corretamente os icones que estão no Botões do taizan.


QUAL ARQUIVO QUE EU DEVO MUDAR PARA APARECER OS ICONES

/Projetos/glade/src$ ls
callbacks.c  interface.c.bak  main.c       Makefile.in  taizan
callbacks.h  interface.h      main.o       support.c
callbacks.o  interface.h.bak  Makefile     support.h
interface.c  interface.o      Makefile.am  support.o


E em que linha ?

Quem quizer baixar os fontes vou deixar um link
http://taizan.googlecode.com/svn/downloads/glade.tar.bz2

Ele é feito com glade-2; não use o glade-3

Preciso de umas dicas !!!

Offline Diego_Rocha

  • Usuário Ubuntu
  • *
  • Mensagens: 372
  • Slackware current
    • Ver perfil
Re: Duvida com um Programa em C
« Resposta #14 Online: 13 de Maio de 2007, 18:34 »
Ai cara nunca usei o glade, mas pelo que deduzo deve ser no arquivo interface.h e interface.c,