Fórum Ubuntu Linux - PT
Suporte Técnico => Programação e Scripts => Tópico iniciado por: Diego_Rocha em 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+++
#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
-
eu ainda nao conheço essa funçao mas vc nao esta infringindo nenhuma regra dela??
nao e system("cmd") ??
-
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 :)
-
nao e terminal?
-
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++
-
ah me desculpa e k ainda estou a introduzir a linguagem por isso e um bocado complicado ajudar:P
-
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.
-
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,
-
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.
-
desculpa não entendi;
-
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
-
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
-
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++
-
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 !!!
-
Ai cara nunca usei o glade, mas pelo que deduzo deve ser no arquivo interface.h e interface.c,