Função system [RESOLVIDO]

1. Função system [RESOLVIDO]

José Alan Torres Pires
alanp1

(usa Outra)

Enviado em 11/05/2021 - 08:48h

Bom dia pessoal, li sobre a função system e vi que ela permite que o shell do sistema execute um código. No Windows o código system("pause") pausa a execução do programa e mostra a mensagem na tela "Pressione uma tecla para continuar". Então gostaria de saber qual parâmetro devo colocar na função system para que ocorra o mesmo no Linux.


  


2. MELHOR RESPOSTA

aguamole
aguamole

(usa KUbuntu)

Enviado em 11/05/2021 - 12:53h

SamL linguagem interpretada de nivel mais alto que linguagem de programação?
Em bash seria.
read -p "pause" var 

Muito mais simples e em uma só linha.

CPU i5-8400 GTX 750 SofRaid 4xSSD 16GB DDR4 mesmo assim uso Lubuntu.

3. Re: Função system

Samuel Leonardo
SamL

(usa XUbuntu)

Enviado em 11/05/2021 - 11:10h

system("pause") é a gambiarra mais feia utilizada desde o período pré-histórico-computacional, ou seja, desde o tempo mais remoto não conectado a internet.
Mas sério, essa gambiarra feia dá pra ser traduzida de uma forma mais adequada com uma função simples:

//coloque esse código antes do main ou num header
void pause ( ) {
printf("Aperte ENTER para continuar...\n");
getchar();
//observe, pode ficar caracteres no stdin, por isso, você precisa "limpar" o stdin
//pesquise no fórum aqui mesmo que existe formas de limpar o buffer de entrada
}
//agpra para usar, no lugar de usar system("pause")
//coloque apenas pause();

Não sei se notou, mas a função system está chamando o programa do windows chamado de pause, dai é o mesmo que seu programa bonito e lindo depender de uma coisa fétida, antiquada e feia feito o tal pause.

COm a função pause que lhe mostrei acima, seu programa fica multiplcataforma sem depender de nennhum comando do sistema apenas pra ter a tal mensagem na tela e o pause da execução do programa.


____________________________________________
https://nerdki.blogspot.com/ acessa aí vai lá, é grátis!
Capeta (demo) do meu trabalho:
https://github.com/cpusam
Uma musiquinha pra relaxar:
https://www.youtube.com/watch?v=5Q02JgxAHu8



4. Re: Função system

Samuel Leonardo
SamL

(usa XUbuntu)

Enviado em 11/05/2021 - 13:11h

aguamole escreveu:

SamL linguagem interpretada de nivel mais alto que linguagem de programação?
Em bash seria.
read -p "pause" var 

Muito mais simples e em uma só linha.

CPU i5-8400 GTX 750 SofRaid 4xSSD 16GB DDR4 mesmo assim uso Lubuntu.

Acontece que isso limita muito o escopo do programa, por exemplo, esse comando ai do pause com shell funciona bem, mas apenas para Linux e afins que tenham suporte ao shellscript. No caso, como eu disse, limita muito o escopo do programa, porque caso seu programa precise ser portado pra um sistema como windows ou mesmo macOS, ai precisaria adaptar o comando pra cada sistema. Por isso, muitos consideram tal prática de gambiarra. É feio e ainda é ensinado nas faculdades rsrsrs É aquele tipo de coisa que todo mundo faz e ninguém questiona por qual motivo acontece, parece até a história do ritual de amarrar o gato:
[lê ai, é interessante]
https://administradores.com.br/artigos/quem-vai-amarrar-o-gato

____________________________________________
https://nerdki.blogspot.com/ acessa aí vai lá, é grátis!
Capeta (demo) do meu trabalho:
https://github.com/cpusam
Uma musiquinha pra relaxar:
https://www.youtube.com/watch?v=5Q02JgxAHu8



5. Re: Função system [RESOLVIDO]

aguamole
aguamole

(usa KUbuntu)

Enviado em 11/05/2021 - 14:23h

Po eu to perguntando se todas as linguagem interpretada é de mais alto nivel que as de programação.

CPU i5-8400 GTX 750 SofRaid 4xSSD 16GB DDR4 mesmo assim uso Lubuntu.


6. Re: Função system [RESOLVIDO]

Samuel Leonardo
SamL

(usa XUbuntu)

Enviado em 11/05/2021 - 14:38h


aguamole escreveu:

Po eu to perguntando se todas as linguagem interpretada é de mais alto nivel que as de programação.

CPU i5-8400 GTX 750 SofRaid 4xSSD 16GB DDR4 mesmo assim uso Lubuntu.

Perae, é que eu fico sem entender, porque veja: linguagem de alto nível é toda linguagem que pode ser entendida por humanos, tipo, aquelas linguagens que necessitam de um processo intermediário como compilação, para transformar em código de máquina. Agora, linguagem de nível de máquina seria assembly e afins, porque está mais perto da instrução do processador.

Linguagem interpretada como python ou shellscript são linguagens de alto nível, porém, ser interpetada é apenas a forma como executa cada instrução.
Exemplo: antigamente o python era uma linguagem puramente interpretada, ou seja, era uma linguagem que o interpretador python executava da primeira linha em diante. Uma linguagem interpretada não deve ser confudida com a definição e alto e baixo nível. Um interpretador de uma linguagem de programação nada mais é um programa que lê um código fonte, seja arquivo txt ou mesmo binário, e então, executa passo a passo cada comando.

Vamos pegar uma linguagem como o javascript, essa linguagem é interpetada pelo browser e é ele que faz o papel de interpretador.
Sendo assim, referente ao que tu perguntou primeiro, linguagem interpretada é apenas um nivel mais "alto" que uma linguagem como o C por exemplo.
C seria uma linguagem mediana, shellscript seria uma linguagem mais alta a nível de execução e assembly como o x86 seria de mais baixo nível.
Mas C e shellscript são linguagem de alto nível, ou melhor, de alto nível de compreensão por humanos, nesse caso o que define o nível é a forma de entender a linguagem, assim, assembly seria a "linguagem" mais próxima das máquinas e, C e shellscript, linguagem mais distantes da máquina, porém, mais próximos de humanos.

Taí o segredo pra derrotar o T-1000. Tem que aprender assembly, viu?

____________________________________________
https://nerdki.blogspot.com/ acessa aí vai lá, é grátis!
Capeta (demo) do meu trabalho:
https://github.com/cpusam
Uma musiquinha pra relaxar:
https://www.youtube.com/watch?v=5Q02JgxAHu8



7. Re: Função system [RESOLVIDO]

José Alan Torres Pires
alanp1

(usa Outra)

Enviado em 11/05/2021 - 15:57h


SamL escreveu:

system("pause") é a gambiarra mais feia utilizada desde o período pré-histórico-computacional, ou seja, desde o tempo mais remoto não conectado a internet.
Mas sério, essa gambiarra feia dá pra ser traduzida de uma forma mais adequada com uma função simples:

//coloque esse código antes do main ou num header
void pause ( ) {
printf("Aperte ENTER para continuar...\n");
getchar();
//observe, pode ficar caracteres no stdin, por isso, você precisa "limpar" o stdin
//pesquise no fórum aqui mesmo que existe formas de limpar o buffer de entrada
}
//agpra para usar, no lugar de usar system("pause")
//coloque apenas pause();

Não sei se notou, mas a função system está chamando o programa do windows chamado de pause, dai é o mesmo que seu programa bonito e lindo depender de uma coisa fétida, antiquada e feia feito o tal pause.

COm a função pause que lhe mostrei acima, seu programa fica multiplcataforma sem depender de nennhum comando do sistema apenas pra ter a tal mensagem na tela e o pause da execução do programa.


____________________________________________
https://nerdki.blogspot.com/ acessa aí vai lá, é grátis!
Capeta (demo) do meu trabalho:
https://github.com/cpusam
Uma musiquinha pra relaxar:
https://www.youtube.com/watch?v=5Q02JgxAHu8



Realmente notei isso, a questão de não ser multiplataforma limita o uso do system. Obrigado pela dica, estava curioso mesmo para saber o comando no linux.




8. Re: Função system [RESOLVIDO]

berghetti
berghetti

(usa Debian)

Enviado em 11/05/2021 - 16:25h

Realmente notei isso, a questão de não ser multiplataforma limita o uso do system. Obrigado pela dica, estava curioso mesmo para saber o comando no linux.

no linux você não precisa de um comando para pausar o terminal, pois o terminal não fecha sozinho igual ao windows.

porem o principal problema de utilizar a função system não é a questão de multiplataforma e sim desempenho.
quando você usa system, você esta invocando um programa externo ao seu, no caso o programa pause do windows ("comandos" são programas como qualquer outro...).

isso implica em todo custo de carga inicial de um processo, que para um programa curto e trivial pode não ser um problema,
mas esse tipo de código em um programa sério é ineficiente.

veja que a alternativa que lhe foi dada em utilizar a função getchar() alem de resolver o problema da portabilidade por ser um padrão da linguagem,
ira executa de forma muito mais sucinta por ser "apenas" uma função. (que bloqueia a execução do programa até que consiga ler 1 byte do stdin).


9. Re: Função system [RESOLVIDO]

aguamole
aguamole

(usa KUbuntu)

Enviado em 26/05/2021 - 19:48h

Pause no shellscript é útil pó.
Imagina você querer que o usuário leia a licença, você pode colocar a licença no inicio e colocar um pause para só continuar quando o usuário terminar de ler.
Porque sem o pause o shell atropela a leitura do usuário.

CPU i5-8400 GTX 750 SofRaid 4xSSD 16GB DDR4 mesmo assim uso Lubuntu.


10. Re: Função system [RESOLVIDO]

Paulo
paulo1205

(usa Ubuntu)

Enviado em 27/05/2021 - 00:46h

aguamole escreveu:

Pause no shellscript é útil pó.
Imagina você querer que o usuário leia a licença, você pode colocar a licença no inicio e colocar um pause para só continuar quando o usuário terminar de ler.
Porque sem o pause o shell atropela a leitura do usuário.


O shell não vai atropelar nada se o programa em C estiver no controle do terminal. Seu argumento não faz muito sentido.

É raro existir uma boa justificativa para chamar um comando externo de dentro do programa em C (especialmente usando system(), que é lenta e de muitos modos vulnerável (cf. terceira mensagem em https://www.vivaolinux.com.br/topico/C-C++/Duvida-com-realloc-em-C)). E para uma tarefa tão simples quanto exibir uma mensagem e fazer uma pausa certamente não existe justificativa que preste, pois a mesma coisa se consegue com duas linhas de código em C, sem chamar programa externo.
printf("Tecle <Enter> para prosseguir...");
for(int ch; (ch=getchar())!=EOF && ch!='\n';) ;



... Então Jesus afirmou de novo: “(...) eu vim para que tenham vida, e a tenham plenamente.” (João 10:7-10)


11. Re: Função system [RESOLVIDO]

aguamole
aguamole

(usa KUbuntu)

Enviado em 27/05/2021 - 11:18h

Pó vc não percebeu que viro offtopico?


CPU i5-8400 GTX 750 SofRaid 4xSSD 16GB DDR4 mesmo assim uso Lubuntu.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts