quinta-feira, 13 de junho de 2019

EXEMPLO 4

No exemplo 4

o host irá responder a vários pacotes de ping que serão disparados contra eles,

 sem perceber que assim irá travar o sistema.

Será executado o ping do sistema,

 que já é um loop infinito,

 tendo que ser executado em uma thread para não deixar o nosso loop parado esperando seu término.


O ping do sistema também retorna uma saída,

que não queremos que seja mostrada na tela,

tendo assim que ser redirecionada para o pipe.



/* progacao4.c */

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>

void ping(char *host); /* para usar a função na thread o cabeçalho da função deve estar declarado */

acao()
{
   int return_thread;
   pthread_t thread;

   while (1)
   {
      return_thread=pthread_create (&thread, NULL, (void *)ping,"ping -s 400 127.0.0.1"); /* criando a thread */
      usleep (10); /* já explicado no exemplo 2 */
   }
}

main () /* o main já foi explicado no exemplo 1 */
{
   int i;
   i=fork();
   if (i==0)
      acao();

}

void ping (char *host)
{
   int desc;
   close(1);

   pipe (desc); /* o pipe já foi explicado no exemplo 1 */
   system (host); /* executa um comando do sistema (ping, ls, rm, mv etc.) */
}


Para compilar:

$ gcc -o progacao4.c -lpthread progacao4


Para executar:

$ ./progacao4


Para ver o andamento use: ps-ax


Para parar a thread, basta matar o processo pai. Faça-o com:

$ ps -ax | grep progacao4 (busque o número do processo progacao4)


E:

$ kill -9 [núm. processo]

Sem comentários:

Enviar um comentário