Acesso ao terminal gnomo com c [fechado]

0

Estou tentando escrever um programa em C para abrir um terminal separado e pingar google.com

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

int main()
{
char command[50];
strcpy(command,"gnome-terminal -e 'sh -c "ping -c4 google.com"'");
system(command);

return (0);
}

Mas apenas mostra uma mensagem de erro como esta

c2.c: In function ‘main’: c2.c:9:43: error: expected ‘)’ before ‘ping’ strcpy(command,"gnome-terminal -e 'sh -c "ping -c4 google.com"'");

Como posso resolver isso?

    
por SuperKrish 15.09.2016 / 19:23

1 resposta

7

Você teria que escapar das aspas duplas internas:

strcpy(command, "gnome-terminal -e 'sh -c \"ping -c4 google.com\"'");

ou execute diretamente o comando ping no terminal, sem um shell delimitador:

strcpy(command, "gnome-terminal -e 'ping -c4 google.com'");

Por favor, note que ambas as variantes fecharão a janela do terminal imediatamente após a saída do comando ping , porque nenhuma delas inicia um shell interativo.

Se você quiser que o terminal permaneça aberto e possa inserir comandos, inicie um shell interativo após ping sair. Eu não sei porque você escolhe sh (que aponta para /bin/dash no Ubuntu) em vez do shell Bash padrão com mais recursos, mas isso não importa. Veja como você pode fazer isso:

strcpy(command, "gnome-terminal -e 'sh -c \"ping -c4 google.com ; sh\"'");

Se você quiser que a janela permaneça aberta até receber um pressionamento de tecla (não permitirá digitar um comando, mas sair imediatamente ao pressionar qualquer tecla), execute o comando read do Bash depois do ping , por exemplo. assim:

strcpy(command, "gnome-terminal -e 'bash -c \"ping -c4 google.com ; read -s -n1\"'");

Isso evita que a tecla digitada seja ecoada no terminal e retorna após o primeiro caractere digitado, não aguardando a tecla Enter . Para mais informações sobre read type help read em um shell Bash.

Por favor, note que isto não funciona em sh (Dash) porque read é específico do Bash.

    
por Byte Commander 15.09.2016 / 19:29