Thread, Courses, Shell e Aquivo
Publicado por Paulo Augusto de Almeida Ferreira 07/12/2005
[ Hits: 6.737 ]
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
Jogo da Velha com IA invencivel
Algoritmo método da Posição Falsa ou Falsa Posição, Newton Raphson e Bisseção em Calculo Númerico
Nenhum coment�rio foi encontrado.
Comparação entre os escalonadores BFQ e MQ-Deadline (acesso a disco) no Arch e Debian
Conciliando o uso da ZRAM e SWAP em disco na sua máquina
Servidor de Backup com Ubuntu Server 24.04 LTS, RAID e Duplicati (Dell PowerEdge T420)
Visualizar câmeras IP ONVIF no Linux sem necessidade de instalar aplicativos
Converter os repositórios Debian para o novo formato com as chaves
Instalando Spotify no Debian 13
Realizar overclock no Miyoo Mini (plus ou normal)
Monitoramento pfsense com zabbix (4)
Erro na inicialização do Debian como resolver (5)
Dúvidas sobre a originalidade de conteúdos online (11)
linux mint reconhece microfone de lapela como fone de ouvido sem micro... (4)