Você está na página 1de 17

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 #include <stdio.h>


#include <stdlib.h>
#include <meu.h>
fontes em C! // 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! #include <stdio.h>


#include <stdlib.h>
#include <meu.h>
// definições
● Inclusões pré-definidas no C // declaração de funções
// estruturas de dados
// variáveis
// funções
● Inclusões de seus próprios fontes

● 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! #include <stdio.h>


#define DIG "0123456789" #include <stdlib.h>
#include <meu.h>
#define UPPER_LIMIT 90 // definições
// declaração de funções
#define LOWER_LIMIT 10
// estruturas de dados
#define CMD_APACHE_CONF_NAME "httpd.conf" // variáveis
// funções
#define CMD_APACHE_START "start"
#define CMD_APACHE_STOP "stop"
#define CMD_GET_HOSTNAME "hostname > /root/name.txt"
#define TOKEN_PROCESSOR_AGENT "-PR"
#define TOKEN_SEGMENT_AGENT "-SG"
#define TOKEN_REQUEST_AGENT "-RQ"
Vários fontes em C 5

● Mais de um .c e .h em seus projetos! #include <stdio.h>


#include <stdlib.h>
#include <meu.h>
// definições
extern void m_usleep(long pausa); // declaração de funções
// estruturas de dados
extern int soma(int a,int b); // 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: #include <stdio.h>
typedef int inteiro; #include <stdlib.h>
#include <meu.h>
#include <stdio.h> // definições
typedef struct tipo_endereco { // declaração de funções
// estruturas de dados
char rua [50]; int numero; char bairro [20]; char cidade [30];
// variáveis globais
char sigla_estado [3]; long int CEP; // funções
} TEndereco;
typedef struct ficha_pessoal {
char nome [50]; long int telefone; TEndereco endereco;
} TFicha;
void main(void) {
TFicha *ex;
...
}
Vários fontes em C 7

● Mais de um .c e .h em seus projetos!


int G_v1, G_v2; #include <stdio.h>
#include <stdlib.h>
void m_usleep(long pausa) #include <meu.h>
// definições
{ // declaração de funções
// estruturas de dados
… // variáveis globais
// funções
}
int soma(int a,int b)
{

}
Vários fontes em C 8

● Mais de um .c e .h em seus projetos!


#include <stdio.h>
#include <stdlib.h>
#include <meu.h>
// definições
● Compilação de múltiplos fontes! // 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 #include <stdio.h>


#include <stdlib.h>
#include <meu.h>
Operacional: // definições
// declaração de funções
// estruturas de dados
UNIX → LINUX! // 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.
#include <stdio.h>
#include <stdlib.h>
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.
#include <stdio.h>
#include <stdlib.h>
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) 16

● 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()
Tópicos Especiais

Aula 03 – Revisão e Conceitos C


e Unix - FIM

Você também pode gostar