Quero criar um programa na linguagem C que permita executar um comando no terminal.
Eu criei um programa em shell script que me daria o ip de qualquer site aberto no meu navegador. Este script de shell é executado digitando este comando no terminal:
sudo tcpdump -n dst port 80 -i eth
Meu professor me disse para criar um programa em linguagem C que abrisse o terminal e digite esse comando e, em seguida, meu script shell funcionaria.
Por favor, diga-me como criar esse programa.
fonte
Olá, vou escrever para você um código de exemplo, explicá-lo e realmente espero que isso ajude você. o protótipo da função é algo como:
sistema int (const char * cmd);
1) abra um terminal e compile o programa
2) execute-o (por exemplo, no Ubuntu) ./program_name comman_name -anything - qualquer coisa
exemplo: ./a.out locale -a
este exemplo imprime todos os locais suportados pelo meu compilador, que é o gcc.
mais informações:
p é um ponteiro para apontar para char (como argv é) p = & argv [2], aponta para -qualquer string que eu gato em tudo -qualquer coisa para minha cmd-string deixo o loop quando * p aponta para NULL veja isso: -> usarei este símbolo para dizer pontos para (não confunda com o operador de seleção de seta para a direita).
argv [0] -> nome_do_programa
argv [1] -> command_name (neste exemplo, o nome do comando será locale, mas digite o comando que você deseja verificar)
argv [2] -> -anything (neste exemplo -a, que é todas as localidades)
argv [3] -> NULL (neste exemplo, isso fecha o loop)
ok é isso, eu acho.
fonte
Eu vou assumir que se trata de usar um binário setuid-root para substituir o sudo, em vez de apenas executar arbitrariamente os comandos, por isso vou incluir as outras partes da solução.
Por uma questão de segurança, evitamos o system () porque ele pode ser invadido.
Depois de compilar isso, instale o binário resultante como setuid-root.
Se você salvou isso como
foo.c
e deseja instalá-lo como/usr/local/sbin/foo
, execute:fonte