Thread, Courses, Shell e Aquivo
Publicado por Paulo Augusto de Almeida Ferreira 07/12/2005
[ Hits: 6.798 ]
E ai! blz... estou encaminhando um fonte de um programa que fiz no C... Estou utilizando Threads e um pouco de Courses... Deve ter um jeito melhor de fazer... mas funciona bem... Só tomem cuidado com as definições...
OBS: lista_busca.txt é um documento com nome para executar a busca, ele deve ser linear (linha a linha) para cada nome...
Estou mandando o fonte + os Anexos no download... espero que ajude alguém... hehehe...
//*************************************************************************//
//*************************************************************************//
//*** ***//
//*** Definições: ***//
//*** Entrada de Dados - lista_busca.txt ***//
//*** Saida de Dados - lista_email.txt ***//
//*** Anexos - Shell_Thread.sh ***//
//*** busca.pl ***//
//*** expressoes.txt ***//
//*** ***//
//*** Diretorios: ***//
//*** /var/spammer ***//
//*** /tmp/spammer ***//
//*** *Todos os aqruivos devem ficar em /var/spammer ***//
//*** *O diretorio /tmp/spammer deve ser criado manualmente ***//
//*** ***//
//*** Compilando: ***//
//*** gcc essearquivo.c -lpthread -o essearquivo.bin -lncurses ***//
//*** ***//
//*************************************************************************//
//*************************************************************************//
// Includes //
#include <stdio.h>
#include <unistd.h>
#include <pthread.h>
#include <semaphore.h>
#include <string.h>
#include <time.h>
#include <curses.h>
#define NUM_THREAD 10 //Num maximo = 30 devido o layout da tela
// Definições da Thread //
pthread_mutexattr_t mutex_attr;
pthread_mutex_t trava_flag;
sem_t criado; //Function que trata a existencia da Thread
// Variaveis Globais //
int num_linhas=0; //numero de linhas do arquivo
int linha_atual=0; // Contador de linha executadas
int cont_thread[NUM_THREAD]; //Contador da Thread
// Sub-Rotinas //
void proc_snifer(int *flag); //Thread Sniffer
void tela_principal(void);
// Principal //
int main(void){
FILE *fb;
// Variaveis Locais //
int i=0;
char ch[15];
pthread_t snifer; //Define a Thread
pthread_t *ptr_sur_thread; // Define a Thread
sem_init(&criado,0,0); //Inicia a função
// Definições da Tela //
initscr(); //Esta função inicializa a ncurses. Para todos os programas devemos sempre inicializar a ncurses e depois finalizar.
start_color(); //Tornando o uso das cores possíveis
// Definição dos pares de cores //
init_pair(1,COLOR_WHITE,COLOR_BLUE);
init_pair(2,COLOR_BLUE,COLOR_WHITE);
init_pair(3,COLOR_RED,COLOR_WHITE);
init_pair(4,COLOR_GREEN,COLOR_BLACK);
init_pair(5,COLOR_BLACK,COLOR_GREEN);
init_pair(6,COLOR_RED,COLOR_GREEN);
init_pair(7,COLOR_RED,COLOR_BLACK);
init_pair(8,COLOR_BLUE,COLOR_BLACK);
//Leitura das linhas no aquivo //
system("wc -l lista_busca.txt | cut -f 1 -d ' ' >>num_lista.txt");
if ((fb=fopen("num_lista.txt","r")) == NULL){
attron(COLOR_PAIR(7));
move(2,5);printw("Nao abriu");
}
fscanf(fb,"%d",&num_linhas);
fclose(fb);
// Fim da Leitura do arquivo
system("rm /var/spammer/num_lista.txt");
// Inicio Sistema Thread
for(i=0;i<=NUM_THREAD;i++) //Zera o contolador das Thread
cont_thread[i]=1;
curs_set(0);
tela_principal();
while(linha_atual<=num_linhas){ //Enquanto não verificar todas as linhas do arquivo
for(i=0;i<=NUM_THREAD;i++){ //For Thread Create
if(cont_thread[i]==1){ // For Thread não existente
sleep(4);
ptr_sur_thread=(void*)malloc(sizeof(pthread_t)); //Alocação de espaço da memora para 1 ponteiro
sleep(1);
if(ptr_sur_thread!=NULL){ //Verifica a alocação
pthread_create((void*)&ptr_sur_thread, NULL, (void*)&proc_snifer, &i); //Cria a Thread, passa como parametro a Flag
pthread_mutex_lock(&trava_flag); //Trava alteração nas variaveis abaixo
cont_thread[i]=0; // Indica a existencia da Thread
sem_wait(&criado); // Aguarda a Thread Indicar que existe
linha_atual+=1;
pthread_mutex_unlock(&trava_flag); // Libera as variaves acima
}
}
}
attron(COLOR_PAIR(7));
move(NUM_THREAD+5,2);printw("Concluido Start Todas as Threas - Sleep(%d)",NUM_THREAD); //Concluido um Loop Formove(NUM_THREAD+5,2);printw("Concluido Start Todas as Threas - Sleep(%d)",NUM_THREAD*2); //Concluido um Loop For
refresh();
tela_principal();
sleep(NUM_THREAD);
attron(COLOR_PAIR(7));
move(NUM_THREAD+5,2);printw(" ");
move(NUM_THREAD+5,2);printw("Ativando Threas Livres"); //Concluido um Loop For
}
endwin(); /* Sempre que finalizarmos um programa com a biblioteca curses, devemos executar este comando. */
}
void proc_snifer(int *flag){ //Thread Sniffer
// Variaveis locais //
auto int x;
auto int line;
char nome[50];
char nome2[10];
x=*flag; line=linha_atual;
sem_post(&criado); // Notifica o sistema que a Thread existe
attron(COLOR_PAIR(1));
move(x+2,2);printw(" ", x,line); refresh();
move(x+2,2);printw("Iniciando Thread - %d <> Linha %d", x,line); refresh();
strcpy(nome,"sh /var/spammer/Shell_Thread.sh lista_busca.txt "); // Concatena nomes e endereços
sprintf(nome2,"%d",line);
strcat(nome, nome2);
strcat(nome," ");
sprintf(nome2,"%d",x);
strcat(nome,nome2);
sleep(2);
system(nome); //Chama a função do Shell ------ valor da variavel "sh/var/spammer/Shell_Thread.sh lista_busca.txt (valor de line) (valor de x)
pthread_mutex_lock(&trava_flag); //Trava o uso da variavel
cont_thread[x]=1;
pthread_mutex_unlock(&trava_flag); // Libera a variavel
attron(COLOR_PAIR(2));
move(x+2,2);printw(" ", x,line); refresh();
move(x+2,2);printw("Finalisando Thread - %d", x); refresh();
}
void tela_principal(void){
int z;
//Tela de Resumo //
attron(COLOR_PAIR(4));
move(1,70); printw("//********************************************//");
move(2,70); printw("//*** Resumo das Threads ***//");
move(3,70); printw("//*** ***//");
for(z=0;z<=NUM_THREAD;z++){ //For de Controle interno
move(z+4,70); printw("//*** Thread status = ***//");}
attron(COLOR_PAIR(7));
for(z=0;z<=NUM_THREAD;z++){ //For de Controle interno
move(z+4,87); printw("%d",z);}
for(z=0;z<=NUM_THREAD;z++){ //For de Controle interno
move(z+4,97); printw("%d",cont_thread[z]);}
attron(COLOR_PAIR(4));
move(z+4,70); printw("//*** ***//");
move(z+5,70); printw("//*** Legenda: 1 = Livre - 0 = Funcionando ***//");
move(z+6,70); printw("//*** ***//");
move(z+7,70); printw("//****************************************=***//");
move(z+8,70); printw("//*** ***//");
move(z+9,70); printw("//*** Total de Linhas: ***//");
attron(COLOR_PAIR(7));
move(z+9,95); printw("%d",num_linhas);
attron(COLOR_PAIR(4));
move(z+10,70); printw("//*** Total de Linhas Executadas: ***//");
attron(COLOR_PAIR(7));
move(z+10,105); printw("%d",linha_atual);
attron(COLOR_PAIR(4));
move(z+11,70); printw("//*** ***//");
move(z+12,70); printw("//********************************************//");
refresh();
}
Script para trocar o papel de parede do fluxbox em GTK
Joguinho de labirinto usando as setas do teclado
Exemplo de sistema especialista usando Inteligência Artificial
Dangerous Tux Game com gráficos
Nenhum comentário foi encontrado.
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
Atualizando o Fedora 42 para 43
Como saber se o seu e-mail já teve a senha vazada?
Como descobrir se a sua senha já foi vazada na internet?
VOL já não é mais como antes? (4)
É normal não gostar de KDE? (12)
E aí? O Warsaw já está funcionando no Debian 13? [RESOLVIDO] (15)
Secure boot, artigo interessante, nada técnico. (4)
copiar library para diretorio /usr/share/..... su com Falha na a... (1)









