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