Tópicos Especiais Leandro Soares de Sousa (DSc.) e-mail: lsousa@id.uff.br Página: http://www.ic.uff.br/~lsousa Aula 03 Revisão e Conceitos C e Unix
Ferramentas para ajudá-los! 2 Programas com vários fontes em C! #include <meu.h> // definições // declaração de funções // estruturas de dados // variáveis // funções
Vários fontes em C 3 Mais de um.c e.h em seus projetos! Inclusões pré-definidas no C Inclusões de seus próprios fontes #include <meu.h> // definições // declaração de funções // estruturas de dados // variáveis // funções Em um fonte podemos desenvolver uma biblioteca para ser usada em nossos sistemas, sem uma função main()!
Vários fontes em C 4 Mais de um.c e.h em seus projetos! #define DIG "0123456789" #define UPPER_LIMIT 90 #define LOWER_LIMIT 10 #define CMD_APACHE_CONF_NAME #define CMD_APACHE_START #define CMD_APACHE_STOP "httpd.conf" "start" "stop" #define CMD_GET_HOSTNAME "hostname > /root/name.txt" #define TOKEN_PROCESSOR_AGENT #define TOKEN_SEGMENT_AGENT #define TOKEN_REQUEST_AGENT "-PR" "-SG" "-RQ" #include <meu.h> // definições // declaração de funções // estruturas de dados // variáveis // funções
Vários fontes em C 5 Mais de um.c e.h em seus projetos! extern void m_usleep(long pausa); extern int soma(int a,int b); #include <meu.h> // definições // declaração de funções // estruturas de dados // variáveis globais // funções No include de uma biblioteca serve para indicar que essa função existe e na link-edição será incluída por algum fonte.
Vários fontes em C 6 Mais de um.c e.h em seus projetos! typedef antigo_nome novo_nome; Como exemplo vamos dar o nome de inteiro para o tipo int: typedef int inteiro; typedef struct tipo_endereco { char rua [50]; int numero; char bairro [20]; char cidade [30]; char sigla_estado [3]; long int CEP; } TEndereco; typedef struct ficha_pessoal { char nome [50]; long int telefone; TEndereco endereco; } TFicha; void main(void) { TFicha *ex;... } #include <meu.h> // definições // declaração de funções // estruturas de dados // variáveis globais // funções
Vários fontes em C 7 Mais de um.c e.h em seus projetos! int G_v1, G_v2; void m_usleep(long pausa) { } int soma(int a,int b) { } #include <meu.h> // definições // declaração de funções // estruturas de dados // variáveis globais // funções
Vários fontes em C 8 Mais de um.c e.h em seus projetos! Compilação de múltiplos fontes! #include <meu.h> // definições // declaração de funções // estruturas de dados // variáveis globais // funções cc -c bl_01.c -I. -o bl_01.o 2>bl_01.txt cc -c bl_02.c -I. -o bl_02.o 2>bl_02.txt cc -c main.c -I. -o main.o 2>main.txt cc -o../bin/prog *.o -lpthread 2>prog.txt
Ferramentas para ajudá-los no mestrado! 9 Coisas do sistema Operacional: UNIX LINUX! #include <meu.h> // definições // declaração de funções // estruturas de dados // variáveis // funções
Coisas do sistema operacional (UNIX/LINUX) 10 Vamos explorar algumas interações com o Sistema Operacional. getpid() retorna o process ID do processo que chama a função PPID / KILL -<sinal> PID / KILL -<sinal> -PID
Coisas do sistema operacional (UNIX/LINUX) 11 COMANDO & nohup COMANDO & (vamos testar!) COMANDO ; COMANDO stddin / sdtout / stderr /dev/null / 1 / 2 / > / >> / < PIPE: comado comando sleep(segundos) usleep(micro segundos) para mili x 1000 Instrução C: system( COMANDO );
Coisas do sistema operacional (UNIX/LINUX) 12 Usando o que aprendemos! Um programa que controla a execução de outro! para.c: recebe como parâmetro um inteiro, salva seu pid e parâmetro, espera por seu conteúdo em segundos e sai. controla.c: dispara uma série de para.c, lê o conteúdo do arquivo gerado por eles e verifica a execução.
Coisas do sistema operacional (UNIX/LINUX) 13 para.c: recebe como parâmetro um inteiro, salva seu pid e parâmetro, espera por seu conteúdo em segundos e sai. int main(int argc, char **argv) { FILE *arq; if (argc!= 2){printf("\nERRO: para <tempo>\n");return(1);} arq = fopen("t.txt","at"); fprintf(arq,"%d;%d\n",getpid(),atoi(argv[1])); fflush(arq); fclose(arq); printf("sou %d e vou dormir %d segundos\n",getpid(),atoi(argv[1])); sleep(atoi(argv[1])); printf("sou %d e dormi %d segundos\n",getpid(),atoi(argv[1])); return(0); }
Coisas do sistema operacional (UNIX/LINUX) 14 controla.c: dispara uma série de para.c, lê o conteúdo do arquivo gerado por eles e verifica a execução. int main(void) { int mpid[5],mtempo[5],i; int mpara[5] = {20,30,40,50,60}; int final[5] = { 0, 0, 0, 0, 0}; int ainda_tem = 5; char linha[100]; FILE *arq; for (i = 0 ; i < 5 ; ++i) { sprintf(linha,"./para %d &%c",mpara[i],(char)('\0')); system(linha); sleep(1); }
Coisas do sistema operacional (UNIX/LINUX) 15 controla.c: dispara uma série de para.c, lê o conteúdo do arquivo gerado por eles e verifica a execução. arq = fopen("t.txt","rt"); for (i = 0 ; i < 5 ; ++i) { fscanf(arq,"%d;%d\n",&(mpid[i]),&(mtempo[i])); } fflush(arq); fclose(arq);
Coisas do sistema operacional (UNIX/LINUX) controla.c: dispara uma série de para.c, lê o conteúdo do arquivo gerado por eles e verifica a execução. while (ainda_tem>0){ for (i = 0 ; i < 5 ; ++i){ if (!final[i]){ sprintf(linha,"ps p %d -o comm= >>/dev/null ; echo $? > res.txt%c",mpid[i],(char)('\0')); system(linha); sleep(1); arq = fopen("res.txt","rt"); if (((char)fgetc(arq))!= ((char)('0'))){ printf("o %d que dormiu %d segundos acabou! \n",mpid[i],mtempo[i]); --ainda_tem; final[i] = 1; } // if fclose(arq); } // if } // for } // while printf("\nterminaram todos!\n"); return(0);} // main() 16
Tópicos Especiais Aula 03 Revisão e Conceitos C e Unix - FIM