Produtor / Consumidor
|
|
|
- Baltazar João Victor Cesário Guimarães
- 9 Há anos
- Visualizações:
Transcrição
1 Problemas sobre Programação Concorrente Produtor / Consumidor /* Programa 1 : Produtor / Consumidor Descricao : Algoritmo Produtor / Consumidor. O buffer para transmissao de dados situa-se numa zona de memoria partilhada entre os dois processos. Esse buffer tem SIZE_OF_BUFFER posicoes */ #define SHMKEY IPC_PRIVATE #define SIZE_OF_BUFFER 10 #define MUTEX 0 #define FULL 1 #define EMPTY 2 int *pont_int; int write_pos = 0; int read_pos = 0; int shmid; extern char *shmat(); int void produz(),coloca(),consome(),retira(); int a,b,i; char *adr; for(i=0;i<20;i++) /* redirecciona os signals */ /* cria memoria partilhada */ shmid = shmget(shmkey,size_of_buffer*sizeof(int),0777 IPC_CREAT); adr = shmat(shmid,0,0); /* attach memory */ pont_int = (int *)adr; // Cria os 3 semaforos: MUTEX, FULL, EMPTY semid=sem_create(3,0); sem_setvalue(semid,mutex,1); sem_setvalue(semid,full,0); sem_setvalue(semid,empty,size_of_buffer); if(semid == -1) printf("erro a criar semaforos"); printf(" PRODUTOR / CONSUMIDOR! \n"); if (fork() == 0)
2 while(1) /* proc. filho -> produtor */ produz(&a); sem_wait(semid,empty); coloca(a); sem_signal(semid,full); sleep(2); while(1) /* proc. pai -> consumidor */ sem_wait(semid,full); retira(&b); sem_signal(semid,empty); consome(b); sleep(3); sem_rm(semid); shmctl(shmid,ipc_rmid,0); /* remove a shared memory */ void produz(a) int *a; static int i = 0 ; i++ ; if(i>30) i=1 ; printf("produtor : produziu o valor %d \n",i); *a = i; void coloca(a) int a; int k; printf("produtor : coloca valor %d na posicao %d \n",a,write_pos); *(pont_int + write_pos) = a ; write_pos++; write_pos %= SIZE_OF_BUFFER ; printf("buffer_prod = "); for(k=0;k<size_of_buffer;k++) printf("%d ",*(pont_int + k)); printf("\n"); void retira(b) int *b; int k; printf("buffer_cons = "); for(k=0;k<size_of_buffer;k++) printf("%d ",*(pont_int + k)); printf("\n"); *b = *(pont_int + read_pos); printf("consumidor : retira valor %d da posicao %d \n",*b,read_pos); read_pos ++; read_pos %= SIZE_OF_BUFFER ; void consome(b) int b;
3 printf("consumidor : consumiu o valor %d \n",b); Leitores / Escritores (v1: leitores têm prioridade) /* Programa V1 : Leitores / Escritores Descricao : Algoritmo Leitores / Escritores. Nesta solucao, os Leitores tem prioridade. A variavel "readcount" encontra-se em memoria partilhada pelos processos, assim como o buffer de leitura/escrita */ #define SHMKEY IPC_PRIVATE #define MUTEX 0 #define WRIT 1 int shmid; extern extern char *shmat(); char *str = "HELLO, READERS!... "; int i; char *adr; int *readcount; char *buffer; for(i=0;i<20;i++) /* redirecciona os signals */ /* cria regiao memoria partilhada */ shmid = shmget(shmkey,128,0777 IPC_CREAT); adr = shmat(shmid,0,0); /* attach memory */ readcount = (int *)adr; buffer = (char *)(adr+1); *readcount = 0; /* cria 2 semaforos */ semid=sem_create(2,1); //sem_setvalue(semid,mutex,1); //sem_setvalue(semid,writ,1); if(semid == -1) printf("erro ao criar os semaforos\n"); printf(" READERS & WRITERS \n"); printf(" Leitores tem prioridade! \n"); if (fork() == 0) fork(); /* 4 processos Leitores */
4 fork(); while(1) *readcount ++; if(*readcount == 1) sem_wait(semid,writ); printf("leitor %d : leu do buffer : %s\n",getpid(),buffer); *readcount --; if(*readcount == 0) sem_signal(semid,writ); while(1) /* processo Escritor */ sem_wait(semid,writ); while(*str) *buffer++ = *str++; /* escreve string */ *buffer = '\0'; printf("escritor : escreveu texto no buffer \n"); sem_signal(semid,writ); sleep(3); sem_rm(semid); semctl(shmid,ipc_rmid,0); /* e a memoria partilhada */ Leitores / Escritores (v2: escritores têm prioridade) /* Programa V2 : Leitores / Escritores Descricao : Algoritmo Leitores / Escritores. Nesta solucao, os Escritores tem prioridade. As variaveis "readcount" e "writecount" encontram-se em memoria partilhada pelos processos, assim como o buffer de leitura/escrita */ #include <stdio.h> #define SHMKEY IPC_PRIVATE #define MUTEX1 0 #define MUTEX2 1 #define MUTEX3 2 #define WR 3 #define RD 4 int shmid; int
5 extern char *shmat(); char *str = "HELLO, READERS!... "; int i; int *adr; int *readcount; int *writecount; char *buffer; for(i=0;i<20;i++) /* redirecciona os signals */ /* cria regiao memoria partilhada */ shmid = shmget(shmkey,128,0777 IPC_CREAT); adr = (int *)shmat(shmid,0,0); /* attach memory */ readcount = (int *)adr; writecount = (int *)(adr+1); buffer = (char *)(adr+2); *readcount = 0; *writecount = 0; /* cria 5 semaforos */ semid= sem_create(5,1); //sem_setvalue(semid,mutex1,1); //sem_setvalue(semid,mutex2,1); //sem_setvalue(semid,mutex3,1); //sem_setvalue(semid,wr,1); //sem_setvalue(semid,rd,1); if(semid == -1) printf("erro ao criar os semaforos\n"); printf(" READERS & WRITERS \n"); printf(" Escritores tem prioridade! \n"); if (fork() == 0) fork(); /* 4 processos Leitores */ fork(); while(1) sem_wait(semid,mutex3); sem_wait(semid,rd); sem_wait(semid,mutex1); *readcount ++; if(*readcount == 1) sem_wait(semid,wr); sem_signal(semid,mutex1); sem_signal(semid,rd); sem_signal(semid,mutex3); printf("leitor %d : leu do buffer : %s\n",getpid(),buffer); sem_wait(semid,mutex1); *readcount --; if(*readcount == 0) sem_signal(semid,wr); sem_signal(semid,mutex1); sleep(2); fork(); while(1) /* 2 processos Escritores */ sem_wait(semid,mutex2); *writecount ++; if(*writecount == 1) sem_wait(semid,rd);
6 sem_signal(semid,mutex2); sem_wait(semid,wr); while(*str) *buffer++ = *str++; /* escreve string */ *buffer = '\0'; printf("escritor %d : escreveu texto no buffer \n",getpid()); sem_signal(semid,wr); sem_wait(semid,mutex2); *writecount --; if(*writecount == 0) sem_signal(semid,rd); sem_signal(semid,mutex2); sleep(3); sem_rm(semid); semctl(shmid,ipc_rmid,0); /* e a memoria partilhada */ Buffer Cleaner (v1) [shm+sem] /* Programa (V1) : Buffer Cleaner Descricao : Existem N processos que leem dados de um periferico virtual e depositam esses dados num buffer comum. Existe ainda outro processo que espera que o buffer fique cheio para o despejar, permitindo assim novo preenchimento. Neste caso N = 3. Alem do semaforo MUTEX existem ainda os semaforos FULL e EMPTY. O buffer de dados assim como o seu index ficam em shared memory */ #include <stdio.h> #define SHMKEY IPC_PRIVATE #define SIZE_OF_BUFFER 10 #define MUTEX 0 #define FULL 1 #define EMPTY 2 int shmid; int *buffer; int *indice; extern char *shmat(); int int i,dado,k; int chr; int *adr; for(i=0;i<20;i++) /* redirecciona os signals */
7 /* cria regiao memoria partilhada */ shmid = shmget(shmkey,(size_of_buffer+1)*sizeof(int),0777 IPC_CREAT); if(shmid == -1) printf("erro ao criar a Shared Memory\n"); adr = (int *)shmat(shmid,0,0); indice = (int *)adr; buffer = (int *)(adr + 1) ; *indice = 0; for(i=0;i<size_of_buffer;i++) *(buffer + i) = 0 ; /* Cria Semaforos */ semid=sem_create(3,0); sem_setvalue(semid,mutex,1); // setvalue(full,0) // setvalue(empty,0) if(semid == -1) printf("nao conseguiu criar semaforos\n"); printf(" BUFFER CLEANER! \n"); if (fork() == 0) /* processo cleaner */ while(1) sem_wait(semid,full); /* wait till is FULL */ printf("*** Buffer = "); for (i=0;i < SIZE_OF_BUFFER;i++) printf("%d ",*(buffer + i)); *(buffer + i) = 0; *indice = 0; printf(" ****\n"); printf("processo cleaner \n"); sem_signal(semid,empty); /* say it is already EMPTY */ for(i=0;i<2;i++) /* cria mais 2 processos */ if(fork() == 0) break; printf("processo com pid=%d\n", getpid()); fflush(stdout); dado = i+1; while(1) /* 3 processos trabalhadores */ k= *indice; *(buffer + k) = dado ; (*indice) ++; printf("processo %d colocou valor %d \n",i+1,i+1);
8 if((*indice) == SIZE_OF_BUFFER) sem_signal(semid, FULL); // say its FULL sem_wait(semid, EMPTY); // wait for EMPTY printf("cleanup\n"); sem_rm(semid); /* remove os semaforos */ shmctl(shmid,ipc_rmid,0); /* remove shared memory */ Buffer Cleaner (v2) [shm+msg para synch] /* Programa : Buffer Cleaner (v2) Descricao : Existem N processos que leem dados de um periferico virtual e depositam esses dados num buffer comum. Existe ainda outro processo que espera que o buffer fique cheio para o despejar, permitindo assim novo preenchimento. Neste caso N = 3. Os semaforos FULL e EMPTY sao substituidos por mensagens. O buffer de dados assim como o seu index ficam em shared memory */ #include <sys/msg.h> #define SHMKEY 1000 #define MSGKEY 1000 #define FULL 1 #define EMPTY 2 #define SIZE_OF_BUFFER 10 #define MUTEX 0 struct mymsg long mtype; short mshort; char mdata[10]; ; int shmid; int msgqid; int *buffer; int *indice; struct mymsg msg_full,msg_empty,msg; extern char *shmat(); int int i,dado,k; int chr; int *adr;
9 for(i=0;i<20;i++) /* redirecciona os signals */ /* cria regiao memoria partilhada */ shmid = shmget(shmkey,(size_of_buffer+1)*sizeof(int),0777 IPC_CREAT); if(shmid == -1) printf("nao conseguiu criar fila msg\n"); adr = (int *)shmat(shmid,0,0); /* attach memory */ indice = (int *)adr; buffer = (int *)(adr + 1) ; *indice = 0; for(i=0;i<size_of_buffer;i++) /* inicializa buffer */ *(buffer + i) = 0 ; msgqid = msgget(msgkey,0777 IPC_CREAT); /* cria fila de mensagens */ msg_full.mtype = 1 ; /* define apenas os tipos das mensagens */ msg_empty.mtype = 2 ; if(msgqid == -1) printf("nao conseguiu criar fila msg\n"); semid= sem_create(1,1); // sem_setvalue(semid,mutex,1) if(semid == -1) printf("nao conseguiu criar o semaforo\n"); printf(" BUFFER CLEANER! \n"); if (fork() == 0) /* processo cleaner */ while(1) msgrcv(msgqid,&msg,256,full,0); /* espera por FULL */ printf("************************** Buffer = "); for (i=0;i < SIZE_OF_BUFFER;i++) printf("%d ",*(buffer + i)); *(buffer + i) = 0; *indice = 0; printf("\n"); msgsnd(msgqid,&msg_empty,sizeof(int),0); /* envia EMPTY */ for(i=0;i<2;i++) /* cria mais 2 processos */ if(fork() == 0) break; while(1) /* 3 processos trabalhadores */ dado = i+1; k= *indice; *(buffer + k) = dado ; (*indice) ++; printf("processo %d colocou valor %d \n",i+1,i+1); if((*indice) == SIZE_OF_BUFFER) msgsnd(msgqid,&msg_full,sizeof(int),0); /* envia FULL */
10 msgrcv(msgqid,&msg,256,empty,0); /* espera por EMPTY */ sem_rm(semid); /* remove o semaforo */ shmctl(shmid,ipc_rmid,0); /* remove shared memory */ msgctl(msgqid,ipc_rmid,0); /* remove fila de mensagens */ O Jantar dos Filósofos. /* Programa : O Jantar dos Filosofos Descricao : O problema do Jantar dos Filosofos */ #include <errno.h> #define MUTEX 5 // os outros 5 semaforos vao de 0 a 4 // os semaforos representam cada um dos recursos int void obtem_chopsticks(); void liberta_chopsticks(); //==========================================================00 int i; int num; for(i=0;i<20;i++) /* redirecciona os signals */ // cria 6 semaforos semid=sem_create(6,1); if(semid == -1) printf("nao conseguiu criar os semaforos\n"); printf(" O JANTAR DOS FILOSOFOS! \n"); for(num=0;num<4;num++) if(fork()==0) break; while(1) printf("<<< Filosofo (%d) a Pensar\n",num); sleep(5); printf("--- Filosofo (%d) com Fome...\n",num); obtem_chopsticks(num); printf(">>> Filosofo (%d) a Comer... ;-)!!!\n",num); sleep(4);
11 liberta_chopsticks(num); void obtem_chopsticks(int id) if(id % 2 == 0) // even number: left, then right sem_wait(semid,(id+1)%5); sem_wait(semid,id); else // odd number: right, then left sem_wait(semid,id); sem_wait(semid,(id+1)%5); printf("philos(%d) obtem chopstick(%d) e chopstick(%d)\n", id, id, (id+1)%5); void liberta_chopsticks(int id) sem_signal(semid,id); sem_signal(semid,(id+1)%5); printf("philos(%d) liberta os chopstick(%d) e chopstick(%d)\n", id, id, (id+1)%5); sem_rm(semid); // remove os semaforos
MAC422/5753 Sistemas Operacionais
MAC422/5753 Sistemas Operacionais Prof. Marcel P. Jackowski Aula #8 Sincronização: Semáforos, Barreiras e Monitores Jantar dos Filósofos Cinco filósofos que somente comem e pensam Cada um deles precisa
Memória partilhada em Unix SysV
Memória partilhada em Unix SysV A forma mais geral de comunicação entre processos é através de memória partilhada. segmento de memoria partilhada Processo A Processo B p q Criação de um segmento de memória
Comunicação entre Processos Memória Compartilhada
Comunicação entre Processos Memória Compartilhada 3/23/17 1 Métodos de comunicação entre processos Memória compartilhada Sinais Pipes Troca de mensagens Memória Compartilhada Memória compartilhada Permite
http://www.csl.mtu.edu/cs4411/www/notes/process/fork/create.html
http://www.csl.mtu.edu/cs4411/www/notes/process/fork/create.html FORK() SYSTEM CALL * UTILIZADO PARA CRIAR SUBPROCESSO * PROCESSO QUE CRIA É PAI * PROCESSO CRIADO É O FILHO * APÓS A CRIAÇÃO AMBOS OS PROCESSO
Pthreads API. Criação de Threads: usando Pthreads
Pthreads API The POSIX 1003.1-2001 standard defines an application programming interface (API) for writing multithreaded applications. This interface is known more commonly as pthreads. 6.1 Criação de
Sistemas Operacionais
Sistemas Operacionais Processos - Parte 2 Prof. Dr. Fábio Rodrigues de la Rocha (Processos - Parte 2) 1 / 33 (Processos - Parte 2) 2 / 33 (Processos - Parte 2) 3 / 33 (Processos - Parte 2) 4 / 33 (Processos
Comunicação entre Processos Memória Compartilhada
Comunicação entre Processos Memória Compartilhada 8/30/18 1 Métodos de comunicação entre processos Memória compartilhada Sinais Pipes Troca de mensagens Memória Compartilhada Memória compartilhada Permite
Sistemas Operacionais: Sincronização entre processos
Sistemas Operacionais: Sincronização entre processos Sincronização Programa concorrente Executado por diversos processos Acesso concorrente a dados Paralelismo real x Paralelismo aparente Multiprocessadores:
tutorial. man fork man pthread_create man pthread_join man wait man sleep
Abaixo, você encontrá dicas para lhe ajudar a fazer o 1º trabalho de SOI, que está descrito na página do curso. Lembrando que essas dicas visam apenas o auxilio nas partes mais problemáticas do trabalho
Memória compartilhada
Memória compartilhada Luiz Affonso Guedes 1 Ivanovitch Silva 1 [email protected] [email protected] 1 Universidade Federal do Rio Grande do Norte 15 de outubro de 2009 Memória compartilhada DCA0109 - Prática
Semáforos. Gerenciamento de Recursos I
Semáforos O problema dos leitores/escritores, apresentado a seguir, consiste em sincronizar processos que consultam/atualizam dados em uma base comum. Pode haver mais de um leitor lendo ao mesmo tempo;
Programação 1. Atribuição, operadores aritméticos, entrada de dados. Técnico em Eletrônica Semestre 5 02
Programação 1 Atribuição, operadores aritméticos, entrada de dados Técnico em Eletrônica Semestre 5 02 Armazenando na memória tipo de variável #include #include main() { int ano; Declaração
Sincronização. Cooperação entre Processos
Sincronização Parte II Programação Concorrente Cooperação entre Processos Vários processos executam em conjunto uma ou mais tarefas, nas quais Competem por recursos Indicam uns aos outros a: Ausência/existência
Semáforos. Gerenciamento de Recursos I
Semáforos O problema dos leitores/escritores, apresentado a seguir, consiste em sincronizar processos que consultam/atualizam dados em uma base comum. Pode haver mais de um leitor lendo ao mesmo tempo;
Manipulação de processos
Manipulação de processos Luiz Affonso Guedes 1 Ivanovitch Silva 1 [email protected] [email protected] 1 Universidade Federal do Rio Grande do Norte 17 de setembro de 2009 Processos DCA0109 1 / 18 Sumário
Introdução à Programação em C (II)
Introdução à Programação em C (II) Resumo Streams de Texto Leitura e escrita de caracteres Caracteres como números inteiros Exemplos Cópia de Ficheiros Contagem de Caracteres Contagem de Linhas Contagem
Sincronização. Objectivos da aula de hoje
Sincronização Parte II Programação Concorrente Objectivos da aula de hoje Como resolver problemas mais complexos de sincronização Produtores-consumidores, leitores-escritores, jantar dos filósofos Como
1) Operadores de auto incremento ++ e auto decremento --
Aula 09 - Operadores de auto incremento e auto decremento, atribuição múltipla, atribuição na declaração, atribuição resumida e algumas regras de boa programação. 1) Operadores de auto incremento ++ e
Exercícios Avaliativos Memória Compartilhada
1ª Avaliação Faculdades Integradas de Caratinga Sistemas Distribuídos Jacson RC Silva Exercícios Avaliativos Memória Compartilhada Uma posição de memória compartilhada é identificada por uma chave. Essa
Campus de Sorocaba. Lista de Exercícios Recuperação Introdução à Ciência da Computação 1º Semestre de 2016
1. Escreva os seguintes números na base 2: a. 2 b. 4 c. 8 d. 16 e. 32 f. 15 g. 125 2. Escreva os seguintes números na base 10: a. 10001 b. 11010 c. 11 d. 1001 e. 111111 Lista de Exercícios Recuperação
A regra de acesso aos dados de uma fila é a seguinte: O primeiro elemento que entra (na fila) é o primeiro que sai (FIFO first in, first out).
Fila Algumas aplicações impõem regras de acesso às informações armazenados em estruturas de dados, restringindo como os dados são inseridos e removidos da estrutura. A fila, também conhecida como QUEUE,
Sincronização de Processos (2)
Sincronização de Processos (2) Tipos de Soluções (cont.) Soluções de Hardware Inibição de interrupções Instrução TSL (apresenta busy wait) Soluções de software com busy wait Variável de bloqueio Alternância
PROGRAMAÇÃO INSTRUÇÕES DA LINGUAGEM C
PROGRAMAÇÃO INSTRUÇÕES DA LINGUAGEM C 1 2 Repetição 1 Enquanto 'C' é verdadeira Fazer? 3 Repetição 1 Enquanto 'C' é verdadeira Fazer? while (C)?; 4 Enunciado: Construa um algoritmo para mostrar os 100
Sincronização. Cooperação entre Processos
Sincronização Parte II Programação Concorrente Cooperação entre Processos Vários processos executam em conjunto uma ou mais tarefas, nas quais Competem por recursos Indicam uns aos outros a: Ausência/existência
Só podem ser executados por uma Thread que detenha o lock do objecto
Transferência de controle entre Threads Os métodos wait(), notify() notifyall(), da classe Object, Permitem a transferência de controlo de uma Thread para outra. Só podem ser executados por uma Thread
#include <stdio.h> #include <stdlib.h>
ÁREA II CCEN / UFPE Disciplina: IF 165 Computação Eletrônica 3º Exercício Escolar 2015.1 Data: 07/07/ 2015 Nome legível do aluno:... Turma... Observações gerais: 1) Preencher os dados do cabeçalho do bloco
SISTEMAS OPERACIONAIS. 2ª. Lista de Exercícios
SISTEMAS OPERACIONAIS INF09344 - Sistemas Operacionais / INF02780 - Sistemas Operacionais / INF02828 - Sistemas de Programação II Prof a. Roberta Lima Gomes ([email protected]) 2ª. Lista de Exercícios Data
Problema do Produtor -Consumidor. Solução por semáforos
Problema do Produtor -Consumidor Solução por semáforos Autoria Autores alunos da disciplina SO II Local Instituto de Informática UFRGS Versão v7 agosto de 2008 por C. Geyer Visão geral do assunto...2 Conceito...3
PROGRAMAÇÃO INSTRUÇÕES DA LINGUAGEM C
PROGRAMAÇÃO INSTRUÇÕES DA LINGUAGEM C 1 2 Condicional 1 Se 'C' é verdadeira Então?; 3 Condicional 1 Se 'C' é verdadeira Então? if (C)?; 4 Condicional 2 Se 'C' é verdadeira Então? Senão?? 5 Condicional
Programação de Computadores II
Programação de Computadores II 1. Programação Básica 2019.1 Slides adaptados do material de Karina Mochetti Problema, Algoritmo, Programa Um programa de computador é a implementação de um algoritmo para
Listas Encadeadas. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR
Listas Encadeadas David Menotti Algoritmos e Estruturas de Dados II DInf UFPR Listas Encadeadas Características: Tamanho da lista não é pré-definido Cada elemento guarda quem é o próximo Elementos não
Linguagem C (repetição)
Linguagem C (repetição) André Tavares da Silva [email protected] Exercício Escrever um programa que conte (mostre na tela) os números de 1 a 100. Comandos aprendidos até o momento: printf, scanf, getchar,
Introdução aos Sistemas Operacionais. Threads
Introdução aos Sistemas Operacionais Threads Eleri Cardozo FEEC/Unicamp O que é uma Thread? Uma thread (linha de controle) é uma unidade de execução e de controle, alocação e compartilhamento de recursos
Linguagens de Programação I
Linguagens de Programação I Tema # 4 Operadores em C Susana M Iglesias FUNÇÕES ENTRADA-SAÍDA I/O printf(), utilizada para enviar dados ao dispositivo de saída padrão (stdout), scanf(), utilizada para ler
Introdução à Programação em C Input / Output
Introdução à Programação em C Input / Output Resumo Aula Anterior Programa começa com função main() Sintaxe para definição de funções Definição de variáveis e atribuições Estruturas de controlo if-then
Escreva a função e_caracter que verifica se um determinado caracter é um numero ou não. Escreva um Programa de teste da função.
Engenharia informatica Escreva a função e_caracter que verifica se um determinado caracter é um numero ou não. Escreva um Programa de teste da função. #include Int e_caracter (char c) { Return(
Sincronização de Processos (4) Monitores
Sincronização de Processos (4) Monitores Monitores (1) Sugeridos por Dijkstra (1971) e desenvolvidos por Hoare (1974) e Brinch Hansen (1975), são estruturas de sincronização de alto nível, que têm por
Algoritmos e Programação
Algoritmos e Programação Aula 3 Introdução a Linguagem C Profa. Marina Gomes [email protected] 1 Aula de Hoje - Criar programas simples em C utilizando a estrutura básica; - Declarar variáveis;
Comunicação entre Processos
Comunicação entre Processos Pipes Redirecionamento de entrada e saída 4/19/18 1 O Pipe: Características (1) Canal de comunicação entre processos parentes, usando a politica First-In-First-Out (FIFO) Tipicamente,
Linguagem de Programação C
Linguagem de Programação C Aula 08 Diogo Pinheiro Fernandes Pedrosa Universidade Federal Rural do Semiárido Departamento de Ciências Exatas e Naturais 13 de novembro de 2009 Introdução O que é uma linguagem
Hello World. Linguagem C. Tipos de Dados. Palavras Reservadas. Operadores Aritméticos. Pré e pós incremento e pré e pós decremento
Hello World Linguagem C printf("hello world!\n"); main é a função principal, a execução do programa começa por ela printf é uma função usada para enviar dados para o vídeo Palavras Reservadas auto double
Legibilidade do código fonte
Sumário Legibilidade do código fonte Exemplos Normas Instrução switch Sintaxe e Semântica Exemplo Tipos enumerados Exemplo Programação 2007/2008 DEEC-IST 1 Legibilidade do código fonte Exemplo: Considere
Universidade Federal de Goiás Instituto de Informática Introdução à Computação Professor: Julliano Rosa Nascimento
Universidade Federal de Goiás Instituto de Informática Introdução à Computação Professor: Julliano Rosa Nascimento Parte 1: Vetores Gabarito - Lista de Exercícios 5 Vetores e Matrizes 1) O que será impresso
Computação 2. Aula Profª. Fabiany Listas Duplamente Encadeadas
Computação 2 Aula 10.1 Listas Duplamente Encadeadas Profª. Fabiany [email protected] ListaEncadeada.h #ifndef _LISTAENCADEADA_H_ #define _LISTAENCADEADA_H_ #include #include #include
INF 1620 P2-01/11/03 Questão 1 Nome:
INF 1620 P2-01/11/03 Questão 1 Considere a implementação de uma lista encadeada para armazenar as notas dos alunos de uma turma dada pelo tipo abaixo: struct lista { char nome[81]; int mat; float p1, p2,
1 System Calls no Linux
Sistemas Operacionais Laboratorio - System Calls Adaptação do Laboratório 1 - Prof. Eduardo Zambon 1 System Calls no Linux Vamos mencionar aqui alguns pontos já discutidos em aula e introduzir novos conceitos
Programação Estruturada I
Programação Estruturada I Introdução a Linguagem C Prof. Thiago Caproni Tavares 1 Prof. Mateus dos Santos 2 1 [email protected] 2 [email protected] Última Atualização:
