Escolar Documentos
Profissional Documentos
Cultura Documentos
e-mail: leandro.uff.puro@gmail.com
Página: http://www.ic.uff.br/~lsousa
Parte IV
Ferramentas para ajudá-los no mestrado! 2
● Coisas do sistema
Operacional:
UNIX → LINUX!
Coisas do sistema operacional (UNIX/LINUX) 3
● 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) 5
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) 9
EliminarSinais()
{
int i;
signal(21,SIG_IGN);
return;
}
void tratar_sinal_de_parada(int a)
{
printf("Sinal %d\n",a);
rotina_qualquer();
signal(M_SIGNAL,tratar_sinal_de_parada);
return;
}
int main(void)
{
signal(M_SIGNAL,tratar_sinal_de_parada);
for (;;)
{
sleep(10);
}
return(0);
}
Ferramentas para ajudá-los no mestrado! 15
#include <stdio.h>
#include <stdlib.h>
#include <strings.h>
void funcionalidade()
{
int i,n = 0;
for(i = 0 ; i < 4 ; i++)
{
n+=i;
printf("executando sleep %d\n",i);
sleep(1);
}
printf("\n");
return;
}
Medição fina de tempo 18
int main()
{ struct timespec ti1,tf1; // nanosegundos
struct timeb ti2,tf2; // milissegundos
// nanosegundos
printf("TEMPO EM NANO SEGUNDOS:\n\n");
capturar_tempo_nanosegundos(&ti1);
funcionalidade();
capturar_tempo_nanosegundos(&tf1);
printf("Tempo ini (s): %ld\n",(long)ti1.tv_sec);
printf("Tempo ini (ns): %ld\n",(long)ti1.tv_nsec);
printf("Tempo fim (s): %ld\n",(long)tf1.tv_sec);
printf("Tempo fim (ns): %ld\n",(long)tf1.tv_nsec);
printf("Tempo Med (ns): %lld\n\n",
(((long long)tf1.tv_sec*(long long)(1000000000))+
((long long)tf1.tv_nsec))-(((long long)ti1.tv_sec*
(long long)(1000000000)) +((long long)ti1.tv_nsec)));
Medição fina de tempo 19
// milisegundos (aproximado)
printf("TEMPO EM MILI SEGUNDOS:\n\n");
capturar_tempo_milissegundos(&ti2);
funcionalidade();
capturar_tempo_milissegundos(&tf2);
printf("Tempo ini (s): %ld\n",(long)ti2.time);
printf("Tempo ini (ms): %ld (aproximado)\n",(long)ti2.millitm);
printf("Tempo fim (s): %ld\n",(long)tf2.time);
printf("Tempo fim (ms): %ld (aproximado)\n",(long)tf2.millitm);
printf("Tempo (ms): %ld\n",(((long)tf2.time*1000)+
(long)tf2.millitm) -
(((long)ti2.time*1000)+
(long)ti2.millitm));
return(0);
}
Medição fina de tempo 20
Parte IV - Continua
Uma breve revisão do “C” 23
● char → 8
● int → 16
● short int → 16
● long int → 32
● float → 32
● short float → 32
● long float → 64
● double → 64
● short double → 64
● long double → 80
Uma breve revisão do “C” 24
● Type cast
(tipo) expressão
● Operador → Ação
● Operador → Ação
● Operador → Ação
● && → AND
● || → OR
● ! → NOT
Uma breve revisão do “C” 28
int a, b, c;
a = b = c = 1; /* atribui 1 às 3 variáveis */
if ((a = 2 * b) > c) /* a = 2 e a comparação
resulta em 1 */
Uma breve revisão do “C” 29
tipo lista_variáveis;
int i = 0, j, l;
short int si;
unsigned int ui;
long inteiro_grande;
long long inteiro_muito_grande;
double balanco, lucro, prejuizo;
Uma breve revisão do “C” 30
/* soma os números de 1 a N */
int soma; /* Variável global */
soma_de_1_a_N(int N) /* Variável por parâmetro */
{
int cont; /* Variável local */
soma = 0; /* inicializa variável soma */
for (cont = 1; cont <= N; ++cont)
{
soma += cont;
}
printf("\nSoma de 1 a %d = %d\n,N,soma);
Return;
}
Uma breve revisão do “C” 31
● Código → Significado
● \b retrocesso
● \f avanço de página
● \n mudança de linha
● \r retorno de carro
● \t tab horizontal
● \” aspas duplas
● \’ aspas simples
● \0 ASCII 0
● \\ barra invertida
● \v tab vertical
● \a alerte (beep)
● \x constante hexadecimal
Uma breve revisão do “C” 33
● Funções úteis:
● A família printf:
● Funções úteis:
● A família printf:
● Rotina de finalidade geral para saída pelo
console
● A função printf() serve para mostrar mensagens
na tela. Sua forma geral é:
● printf(“string de controle”, lista argumentos);
● Funções úteis:
● A família printf:
● Todos os comandos de formatação começam por %
que é seguido pelo código de formatação
● Funções úteis:
● A família printf:
● Código → Formato
● %c um único caracter
● %d decimal
● %i decimal
● %e notação científica
● %f ponto decimal flutuante
● %s string de caracteres
● %u decimal sem sinal
● %% sinal %
Uma breve revisão do “C” 37
● Funções úteis:
● A família printf:
● sprintf(variavel_string,“string de controle”, lista
argumentos);
● fprintf(variavel_arquivo,“string de controle”, lista
argumentos);
Uma breve revisão do “C” 38
● Funções úteis:
● A família scanf:
● Rotina de finalidade geral para entrada pelo
console
● A função scanf() serve para ler informações do
teclado.
● Sua forma geral é:
● scanf(“string de controle”, lista argumentos);
● Funções úteis:
● A família scanf:
● Exemplo:
● scanf(“%d”, &cont);
● Como strings são representadas por vetores,
NÃO deve ser colocado o & antes do nome da
variável
● Também inclui:
● sscanf(variavel_string,“string de controle”, lista
argumentos);
● fscanf(variavel_arquivo,“string de controle”, lista
argumentos);
Uma breve revisão do “C” 40
● Funções úteis:
● Arquivos:
● Estrutura:
● FILE *arq;
● Abertura:
● fopen(path,”string abertura”);
para o arquivo
● String abertura:
● r → leitura
● w → escrita
● a → append
● Funções úteis:
● Arquivos:
● Despejar o arquivo:
● fflush(arq); fflush(stdout);
● Fechar:
● fclose(arq);
● Remoção:
● remove(path);
● Fim de arquivo:
● feof(arq); /* Verdadeiro se estiver no final
do arquivo. */
Uma breve revisão do “C” 42
● Funções úteis:
● Arquivos (leitura/escrita):
● Já vistas → fprintf e fscanf
● Linha texto:
● fgets(char *s, int tamanho, FILE *arq);
● Se OK retorna o ponteiro para s ou (char *) (NULL)
● Preserva o '\n'
● fputs(char *s, FILE *arq);
● Imprime em arq até o NULL ('\0')
● Retorna EOF em erro
● Caractere:
● fgetc(arq); /* retorna o caractere ou EOF em erro */
● fputc(inc c, arq); /* retorna o caractere ou EOF em
erro */
Uma breve revisão do “C” 43
● Funções úteis:
● Arquivos (leitura/escrita):
● Buffer binário:
● size_t fread(void *ptr, size_t size, size_t
nmemb, FILE *stream);
● Funções úteis:
● Arquivos (posicionamento):
● Buffer binário:
● int fseek(FILE *arq, long offset, int
whence);
● whence:
● SEEK_SET: do início
Parte IV – Continua
● Funções úteis:
● strings:
● memset((void *) a, int v, int qtd) → coloca
qtd vs em a.
● strcpy(a,b) → a recebe b (cuidado: limpem b
antes.
● strcat(a,b) → a + b
● strlen(a) → tamanho de a até o '\0'
● strcmp(a,b) e strncmp(a,b,n) → compara a com b
ou n primeiros caracteres de a com b.
● <0 a < b
● 0 a == b
● >0 a > b
Uma breve revisão do “C” 47
● Estruturas:
● Forma geral:
struct nome_estrutura {
tipo1 var1;
tipo2 var2;
} var_estrutura;
Uma breve revisão do “C” 48
● Estruturas:
● Forma geral:
nome_variavel.nome_elemento;
Uma breve revisão do “C” 49
● Estruturas:
● Exemplo:
struct pessoa {
char nome[21];
int idade;
} primeiro;
main() {
struct pessoa segundo;
strcpy(primeiro.nome, “José”);
primeiro.idade = 20;
segundo = primeiro;
}
Uma breve revisão do “C” 50
● Estruturas:
● Exemplo:
● Estruturas:
● Estruturas:
● Veja a declaração:
segundo.idade = 10;
primeiro = &segundo;
(*primeiro).idade
primeiro -> idade
Uma breve revisão do “C” 53
● Estruturas:
● Veja:
struct complexa {
char setor[21];
struct pessoa funcionarios[50];
}
Uma breve revisão do “C” 54
● Estruturas:
● Veja:
struct complexa {
char setor[21];
struct pessoa funcionarios[50];
}
Uma breve revisão do “C” 55
● Estruturas:
● Vetores:
● Vetores:
tipo nome_var[tamanho];
● Onde
● Vetores:
● Vetores:
● Exemplo:
main()
{
int x[10]; /* vetor com 10 elementos int */
int t;
for (t = 0; t < 10; t ++)
x [ t ] = t;
}
Uma breve revisão do “C” 60
● Vetores:
int elementos[10];
elementos[12] = 0;
elementos[10] = 0;
Uma breve revisão do “C” 61
● Matrizes:
● Forma da declaração:
tipo nome_var[dimensão1][dimensão2];
● Exemplo:
char tabela[5][5];
Uma breve revisão do “C” 62
● Matrizes:
int matriz[5][7][3][8];
Uma breve revisão do “C” 63
● Matrizes:
● Exemplo:
main()
{
int numeros[4][3], i, j;
for (i = 0; i < 4; i ++)
for (j = 0; j < 3; j++)
numeros[ i ][ j ] = i * j;
}
Uma breve revisão do “C” 64
● Matrizes:
main()
{
char strings[5][20]; /* 5 strings */
int i;
for (i = 0; i < 5; i ++)
gets(strings[ i ]);
}
Uma breve revisão do “C” 65
● Matrizes:
● A forma geral é:
● Exemplo:
● Matrizes:
● Exemplo:
● Ponteiros:
● Ponteiros:
● Ponteiros:
● Ponteiros:
tipo *nome_var;
Exemplo:
char *p;
int *temp, *valor;
Uma breve revisão do “C” 71
● Ponteiros:
● Exemplo:
main()
{
int numero = 5, *p;
p = №
printf(“%d %d\n”, numero, *p);
*p = 3;
printf(“%d %d\n”, numero, *p);
}
Uma breve revisão do “C” 72
● Ponteiros:
● Ponteiros:
● Veja o código:
● Ponteiros:
● Após a definição:
str[4]
*(p + 4)
p[4]
● Ponteiros:
/* este programa está errado */
main()
{
int x, *p;
x = 10;
*p = x;
}
/* este programa está errado */
main()
{
int x, *p;
x = 10;
p = x;
printf(“%d”, *p);
}
Tópicos Especiais em Sistemas Computacionais
Parte IV – FIM