função system [RESOLVIDO]

1. função system [RESOLVIDO]

Douglas jose
douglas17091995

(usa Ubuntu)

Enviado em 02/11/2015 - 00:59h

Exites alguma forma de utilizar uma variável dentro da função system ??

ex. system("cat %d",x);


  


2. Re: função system [RESOLVIDO]

Leandro
rahremix

(usa Arch Linux)

Enviado em 02/11/2015 - 01:50h

Tenta algo assim:
#include <stdio.h>
#include <string.h>

int main (void){

char arquivo[100],comando[104];

printf("Informe o arquivo: ");
scanf("%99s", arquivo);

strcpy(comando, "cat ");
strcat(comando, arquivo);

system(comando);

return(0);

}


Aqui rodou bem:
[~][cipullo@Skypiea]$ ./teste 
Informe o arquivo: /etc/fstab
#
# /etc/fstab: static file system information
#
# <file system> <dir> <type> <options> <dump> <pass>
# /dev/sda3
UUID=36a53792-790d-458f-a404-d4a171666612 / ext4 rw,relatime,data=ordered 0 1

# /dev/sda1
UUID=a0f14c07-df25-4c60-bd68-9dd0b89e2eb9 /boot ext4 rw,relatime,data=ordered 0 2

# /dev/sda2
UUID=479e6b30-170e-4b48-a837-08501c427b89 /home ext4 rw,relatime,data=ordered 0 2

# /dev/sda4
UUID=c2338b91-a166-4c66-9ac2-b67ad1bc2e2e none swap defaults 0 0



Fiz +/- baseado nesse post do StackOverflow: http://stackoverflow.com/questions/8875138/how-to-use-variable-in-system-in-c

------------------------------------------------------------------------------------------------------
http://www.gnu.org/philosophy/free-software-even-more-important.pt-br.html


3. Não utilize a função system

Uilian Ries
uilianries

(usa Linux Mint)

Enviado em 02/11/2015 - 17:23h

A função system executa o comando especificado, invocando uma implementação definida pelo processador de comando (shell). O problema no system está no exploração de vulnerabilidades.

Para este caso, prefira funções como execve, veja o exemplo:


#include <unistd.h>

int main(void) {

/* Passe o nome do programa que deseja executar,
* Os parâmetros que deseja
* Coloque NULL no final, como batente.
*/
char *const args[3] = {"/bin/touch", "foo.txt", NULL};
// Variáveis de ambiente, caso queira especificar
char *env[] = {NULL};
// ID do processo filho criado
pid_t pid;

// Cria um processo filho
pid = fork();
if (pid == -1) {
return -1;
}

// Invoca o comando touch
if (execve(args[0], args, env) == -1) {
return -1;
}

return 0;
}







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts