Comunicação entre pai e filho



Documentos relacionados
Comunicação Inter-Processo em Unix. Pipes FIFO (Named Pipes) Pipes

Comunicação entre Processos

Comunicação entre Processos Canal de comunicação Arquitetura da comunicação Modelos de comunicação

6. Comunicação entre processos - Pipes

Programação de Sistemas

Inter-process Communication (IPC) Comunicação entre processos (1) Introdução Tubos (Pipes)

Inter-process Communication (IPC)

PIP/CA - Programa Interdisciplinar de Pós-Graduação em Computação Aplicada da UNISINOS ALGORITMOS & ESTRUTURAS DE DADOS

Inter-process Communication (IPC)

Tubos ou Pipes de Comunicação

Programação de Sistemas. Tubos

Programação de Sistemas

Comunicação baseada em canais de I/O e Pipelines no sistema Unix. José C. Cunha, DI-FCT/UNL

Manipulação de Arquivos

Inter-process Communication (IPC)

Unnamed Pipes. Chamada ao sistema pipe. Pipes. Comunicação entre processos. Unnamed Pipes Chamada so sistema. José Pedro Oliveira

TROCA DE MENSAGENS SOCKETS. Comunicando processos através de SOCKETS. SOCKETS com conexão. SOCKETS sem conexão

Sistemas Operacionais II

Computação 2. Aula Profª. Fabiany Listas Duplamente Encadeadas

Conceitos de Sistemas Operacionais: Chamadas de Sistema. Prof Rafael J. Sandim

E.E.E.P. Dr. Solon Tavares Sistemas Operacionais Prof. Henrique Cordeiro. Programação Concorrente em Linux

Introdução. Manipulação de arquivos em C. Estrutura de Dados II Prof Jairo Francisco de Souza

time_t shm_ctime; /* hora da última alteração de atributod da MP através de shmctl + IPC_SET */

IPC Interprocess communication

1ª versão. #include <stdio.h> #include <string.h> #include <stdlib.h> #define maxdiscos 1000


Exercício 1. Tabela 1: Cadastro de usuários, senhas e privilégios (exemplo). Login Senha Privilégio Armamento

Projeto: Camada Independente de Dispositivo

Um processo sob UNIX ocupa uma área de memória formada basicamente por 3 partes:

Grupo I [5 Val] Suponha que, ao correr comando ls l whoami, se obtinha o seguinte output: -rwxr-xr-x 1 root root Sep whoami

Sistemas Operacionais INF Prof. José Gonçalves

Persistência de Dados

Leitura de Arquivos. Prof. Fabrício Olivetti de França

INF 1620 P1-10/04/02 Questão 1 Nome:

Construa a função insere_lista para inserir um elemento na lista ordenada, duplamente encadeada, descrita acima.

Computação 2. Aula 8. Profª. Fabiany Arquivos

Outline. 33. Manipulação de arquivos DIM

Arquivos. Estruturas de Dados II Vanessa Braganholo

Sistema de Entrada/Saída

Algoritmos e Programação _ Departamento de Informática

Bibliotecas. Apoio à Programação Distribuída. Socket. Socket. bibliotecas bibliotecas+ferramentas linguagens de programação distribuídas

14. Arquivos. W. Celes e J. L. Rangel. Estruturas de Dados PUC-Rio 13-1

Manipulação de Arquivos

Algoritmos de Busca em Tabelas

Grupo I [6 v] Considere o processo com a seguinte tabela de páginas: Página Presente Protecção Base 0 0 RW RW R R RW -

I/O de baixo-nível em ficheiros

Sistemas de Operação (2018/2019) Teste de Auto-Avaliação Prática

Comunicação entre Processos Named Pipes (FIFO)

Duplicação e partilha de ficheiros

Estruturas de Dados. Profa. Juliana Pinheiro Campos

Experimentos com a memória cache do CPU

Firewalls de Aplicação WEB, Idiomas e Expressões Regulares. Condições de Bypass

Sistemas Operacionais e Introdução à Programação. Programação com linguagem C

Vetores. Vetores. Figura 1 Exemplo de vetor com 10 elementos

Manipulação de processos

Algoritmos e Programação Estruturada

3 Introdução às chamadas ao sistema

Leandro Soares de Sousa (DSc.) Página: Aula 05 - desenvolvimento com sockets

MÓDULO 02 PROCESSOS E THREADS PROCESSOS e THREADS

INF 1005 Programação I

Memória partilhada em Unix SysV

Processos em Unix. Conteúdo: Definição de Processos em Unix Estrutura, tipo e escalonamento de processos em Unix Processos, Pai, Filho e Zumbi.

17 - Funções e Procedimentos em C Programação Modular

INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA RIO GRANDE DO NORTE

Computadores e Programação (MAB ) Lista 3 - Grupo de até 3 alunos - 80 pontos

Armazenamento de Dados. Prof. Antonio Almeida de Barros Junior

Verificando corretude da triangulação

Sistemas de Operação Sockets

Fundamentos de Programação 1

PROGRAMAÇÃO ESTRUTURADA. CC 2º Período

Fundamentos de Arquivos. SCC203 Algoritmos e Estruturas de Dados II

Listas (cont.) K&R: Capitulo 6. Lista Simplesmente Ligada IAED, 2012/2013. Conjunto de nós. Cada nó contém. head NULL. typedef struct node {

Comunicação entre Processos Memória Compartilhada

Ciclo de Vida de um Processo

USP - ICMC - SSC SSC o. Semestre Disciplina de Introdução à Computação para Engenharia Ambiental

CAP. IX - MANIPULAÇÃO DE ARQUIVOS Generalidades sobre Arquivos. 9.2 Abertura e Fechamento de Arquivos. Operações com arquivos:

sockets interprocess communication Taisy Weber

Sistemas Distribuídos RPC x RMI. Edeyson Andrade Gomes

Comunicação entre Processos Memória Compartilhada

Estruturas de dados compostas

EPs 1 e 2. EP2: veja. EP1: veja

Disciplina de Linguagem de Programação e Aplicações [ Eng. Elétrica / Automação ]

Conceitos e Chamadas de Sistema

Trabalho 3: Agenda de Tarefas

USP - ICMC - SSC SSC o. Semestre Disciplina de Linguagem de Programação e Aplicações [ Eng. Elétrica / Automação ]

Programação com Sockets TCP e UDP - Cliente. Gustavo Leitão

UFSM Introdução ao Dev-C++ Profa. Patrícia Pitthan. Introdução ao Dev-C++

Introdução a Programação. Ponteiros e Strings, Alocação Dinâmica

Leandro Soares de Sousa (DSc.) Página: Parte III

Operaçõe õ s c om o Strings Intr oduç ão a o Ponte iros o e Funçõe õ s

Manual do Desenvolvedor Criptografia de Arquivos do WebTA

GABARITO COMENTADO SISTEMAS OPERACIONAIS. PROF. Cláudio de C. Monteiro, Evanderson S. de Almeida, Vinícius de M. Rios

Disciplina de Introdução à Ciência da Computação ICC 1 - Teoria

Transcrição:

Comunicação entre pai e filho Ao chamar um fork(), processos pai e filho deixam de compartilhar memória Como fazer então para que o resultado de um processo possa ser recebido pelo outro? Exemplos: Processo pai distribui dados para os processos filho, que devolvem resultados que são consolidados pelo pai. 1 Pipes como mecanismo de comunicação entre processos Na shell, em cmd1 cmd2 estamos direcionando o STDOUT de cmd1 para o STDIN de cmd2 Exemplos: > ps aml sort r k 7 less // lista os processos com maior uso de memória > ps axl grep zombie // lista todos os processos zombie (*) Isso é um pipe (ou pipeline), ou seja, um canal, que é uma estrutura de dados do kernel Processos pai e filho podem se comunicar através de pipes. Usa-se a a função de sistema pipe() Obs: (*) processo zombie já terminou a sua execução mais ainda tem sua entrada na tabela de processos, que é necessária para o pai ler o status de exit do filho. 2 1!

Função pipe() Cria um canal de comunicação entre processos Definido em <unistd.h> int pipe(int fd[2]); Cria dois canais de comunicação (visíveis pelo pai e filho) fd[0] é aberto para leitura fd[1] é aberto para escrita Retorna: 0 (zero) em caso de sucesso -1 em caso de erro Função pipe() Pipes abertos pela função pipe() devem ser fechados pela função close() Dados escritos no descritor de arquivo fd[1] podem ser lidos do fd[0] Dois processos podem se comunicar através de um pipe se eles lêem e escrevem em fd[0] e fd[1] respectivamente Os dados são transmitidos e recebidos através de write() e read() 2!

Função pipe() processo pipe() processo fd[0] fd[1] fork() pai fd[0] fd[1] fd[1] fd[0] filho Esquema de comunicação via pipe pipe(fd)! fork()! Para um pipe do pai para o filho, o pai fecha fd[0] e o filho fecha o fd[1].! Para um pipe do filho para o pai, ocorre o contrário.! close(fd[1])! close(fd[0])! read(fd[0])! write(fd[1])! close(fd[0])! close(fd[1])! Processo pai! Processo filho! 3!

Criando os canais com pipe() int fd[2]; // descritor dos pipes if (pipe(fd) < 0) puts ("Erro ao abrir os pipes"); exit (-1); Em caso de sucesso, a chamada à pipe() retorna 0 e fd[0] conterá o descritor de leitura e fd[1] o de escrita Em caso de falha, a função retorna -1 Função write() Utilizada para escrever dados em um arquivo ou qualquer outro objeto identificado por um descritor de arquivo (file descriptor) Definido em <unistd.h> ssize_t write(int fildes, const void *buf, size_t nbyte); Onde fildes : é o descritor do arquivo (ou do pipe) buf : endereço da área de memória onde estão os dados que serão escritos nbytes : número de bytes que serão escritos Valor retornado: Em caso de sucesso, a função retorna a quantidade de dados escritas Em caso de falha, o valor retornado difere da quantidade de bytes enviados 4!

Função read() Lê dados de um arquivo ou de qualquer outro objeto identificado por um descritor de arquivo Definido em <unistd.h> ssize_t read(int fildes,void *buf, size_t nbyte); Onde: fildes : descritor do arquivo buf : endereço de memória onde os dados serão armazenados depois de lidos nbyte : quantidade máxima de bytes que podem ser transferidos Retorna: Quantidade de dados lidos Exemplo do uso de pipe #include <stdio.h> #include <string.h> #include <stdlib.h> #include <unistd.h> int main (int argc, char *argv[]) int ndadostx, ndadosrx; // quantidade de dados transmitidos/recebidos int fd[2]; // descritor dos pipes const char textotx[] = "uma mensagem"; char textorx[sizeof textotx]; if (pipe(fd) < 0) puts ("Erro ao abrir os pipes"); exit (-1); ndadostx = write(fd[1], textotx, strlen(textotx)+1); printf("%d dados escritos\n", ndadostx); ndadosrx = read(fd[0], textorx, sizeof textorx); printf("%d dados lidos: %s\n", ndadosrx, textorx); close(fd[0]); close(fd[1]); return 0; 5!

Exemplo: pai escreve para o filho #include <stdio.h> #include <string.h> #include <stdlib.h> #include <unistd.h> void main () int fd[2]; pipe(fd); if (fork() == 0) /* filho */ close(fd[1]); /* fd[1] desnecessario */ read(fd[0],...); /* lê do pai */... else close(fd[0]); /* fd[1] desnecessario */ write(fd[1],...); /* escreve para o filho */... Outras formas de comunicação entre processos Named pipes (FIFO) usa o Sistema de Arquivos (mas não cria um arquivo de fato) Usa-se mkfifo() ou mknod()! Exemplo: mkfifo my_pipe! gzip -9 c < my_pipe > out.gz &! cat file > my_pipe!! rm my_pipe Anonymous pipe = apenas em uma direcão 12 6!