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

Documentos relacionados
Duplicação e partilha de ficheiros

Processos. Programas e Processos. Aula 1 - Chamadas ao sistema. José Pedro Oliveira fork exit getpid, getppid wait, waitpid

Sinais. Sinais e fork. Sinais e exec. Segunda aula. Chamada ao sistema fork Chamada ao sistema execve. José Pedro Oliveira

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

Sistema de Entrada/Saída

Comunicação entre pai e filho

Programação de Sistemas. Tubos

Comunicação entre Processos

Chamada ao sistema: sbrk. Chamada ao sistema: brk. brk sbrk. Generalidades. José Pedro Oliveira calloc e malloc free

6. Comunicação entre processos - Pipes

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

SISTEMAS OPERATIVOS I

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

Tratamento de Sinais

Canos (Pipes) As pipes são um mecanismo de comunicação unidirecional entre dois ou mais processos. Um exemplo do uso de pipes na shell é:

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

1/24 FICHEIROS DE TEXTO

IPC Interprocess communication

API de Sockets. Modelo Cliente/Servidor (2/2) Modelo Cliente/Servidor (1/2) José Pedro Oliveira Sistemas Operativos I

1 o Trabalho de Programação Período: 2008/1 Prof a Patrícia Dockhorn Costa

Pesquisa por nome. Pesquisa por nome Pesquisa por tipo Pesquisa por tamanho. Pesquisa de ficheiros. José Pedro Oliveira

Computação para Informática - Prof. Adriano Joaquim de Oliveira Cruz Segunda Prova - 14 de junho de 2017

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

Sistemas Operacionais II

Sistemas Operativos, 3. o MIEIC 2009/10, FEUP

SVCs para Controle de Processos no Unix (cont.) Sistemas Operacionais

Memória partilhada em Unix SysV

SVCs para Controle de Processos no Unix (cont.) Sistemas Operacionais

Programação de Sistemas

Introdução aos Sistemas Operativos

João Correia Lopes. v 1.0, Outubro de Introdução aos Sistemas Operativos v1.0 1

Inter-process Communication (IPC)

Interpretadores de comandos. Interpretadores de comandos de login válidos. Caracteres especiais. José Pedro Oliveira

PROGRAMAÇÃO DE MICROPROCESSADORES 2007 / 2008

Sumário. Ficheiros. Ficheiros

Controlo de Execução. K&R: Capitulo 3

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

Linguagens de Programação I

SVCs para Controle de Processos no Unix (cont.) Sistemas Operacionais

Sistemas Operativos 2015 / Corpo Docente

Licenciatura em Eng.ª Informática Sistemas Operativos - 2º Ano - 1º Semestre. Trabalho Nº 4 Desenvolvimento de um mini-shell

LEIC/LERC 2012/13 2º Teste de Sistemas Operativos 15/Janeiro/2013

Sistemas Operacionais

Programação de Sistemas

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 {

I/O de baixo-nível em ficheiros

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.

Sistemas Operacionais II

LÓGICA DE PROGRAMAÇÃO PARA ENGENHARIA ESTRUTURA COM DECISÃO MÚLTIPLA. Prof. Dr. Daniel Caetano

Programação. MEAer e LEE. Manipulação de ficheiros de texto. Bertinho Andrade da Costa. Instituto Superior Técnico. 2010/2011 1º Semestre

Arquitetura de Sistemas Operativos

Programação de Sistemas

A linguagem C (visão histórica)

ESTRUTURA COM DECISÃO COMPOSTA

Manipulação de Ficheiros

Programação de Computadores I Introdução ao C PROFESSORA CINTIA CAETANO

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

SISTEMAS OPERATIVOS I

Introdução à Programação com Sockets. Fernando Jorge Silveira Filho Daniel Sadoc Menasché

1 System Calls no Linux

UNIVERSIDADE LUSÓFONA DE HUMANIDADES E TECNOLOGIAS

Mestrado em Engenharia Física Tecnológica

Inter-process Communication (IPC)

Estruturas de dados. IPC2 1999/2000 F. Nunes Ferreira

3 Introdução às chamadas ao sistema

Fundamentos de Programação 1

Introdução à Programação em C

C/C++; biblioteca stdio

Instituto Politécnico de Setúbal. Escola Superior de Tecnologia. Departamento de Sistemas e Informática. Guia para codificação em JAVA

Introdução à Programação Aula 07. Prof. Max Santana Rolemberg Farias Colegiado de Engenharia de Computação

Programação I PRG Engenharia de Telecomunicações 2ª Fase Professor: Cleber Jorge Amaral

LEIC/LERC 2011/12-1º Exame de Sistemas Operativos 16/Janeiro/2012

PCS-2042 Sistemas Operacionais. Projeto 3: Drivers

Estácio-FIC Graduação em Redes de Computadores

Teste de Sistemas de Operação 15 de Abril de 2010

Ambientes de Execução

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

Estruturas da linguagem C. 1. Identificadores, tipos primitivos, variáveis e constantes, operadores e expressões.

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

3. Linguagem de Programação C

UNIVERSIDADE LUSÓFONA DE HUMANIDADES E TECNOLOGIAS 1º Semestre 2007/2008

Comunicação entre Processos. 1. Pipes 2. Fifos 3. Sockets

Programação Mestrado Integrado em Engenharia Aeronáutica 1º ano, 1º semestre. T. 11 Gestão de Memória Dinâmica

3.1 - Funções para manipular dados de entrada e saída padrão

Programação. Cap. 12 Gestão de Memória Dinâmica

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

Eventos. Rotinas Assíncronas

UNIVERSIDADE LUSÓFONA DE HUMANIDADES E TECNOLOGIAS 2º Semestre 2013/2014

Outline. 33. Manipulação de arquivos DIM

Sinais: eventos assíncronos

LEIC/LERC 2009/10 1º Exame de Sistemas Operativos

Manipulação de processos

Introdução à Programação Aula 04. Prof. Max Santana Rolemberg Farias Colegiado de Engenharia de Computação

Elementos de entrada e saída com arquivos

Introdução à Programação (CC111)

Linguagens de Programação

Inter-process Communication (IPC)

Técnicas Avançadas de Programação

Sistemas de Operação (2018/2019) Ficha 4

Transcrição:

Conteúdo (jpo@di.uminho.pt) Grupo de Sistemas Distribuídos Departamento de Informática Escola de Engenharia Universidade do Minho Sistemas Operativos I 006-007 1 Exercícios 3 Referências Pipes Chamada ao sistema Pipes Pipes são a forma mais antiga de comunicação entre processos em sistemas UNIX. Limitações 1 historicamente as s são half-duplex, isto é, a informação só flui numa direcção. s só podem ser usadas entre processos que tenham um processo ancestral comum. Normalmente a é criada por um processo, que em seguida invoca a chamada ao sistema fork, e em que a é usada entre processo pai e filho. Synopsis #include <unistd.h> int (int filedes[]); Valores de retorno -1 - erro 0 - ok Descritores de ficheiros filedes[0] aberto em modo de leitura filedes[1] aberto em modo de escrita

Exemplo de criação de uma Pipe half-duplex Extracto de código 1 #include <unistd. h> 3 / /... 5 i n t fd [ ] ; 6 7 i f ( ( fd ) == 1) { 8 p e r r o r ( ) ; 9 e x i t ( 1 ) ; 10 } 11 1 / /... processo processo ou fd[0] fd[1] fd[0] fd[1] kernel Pipe half-duplex depois de um fork Pipe half-duplex: canal de comunicação pai -> filho pai filho fork fd[0] fd[1] fd[0] fd[1] pai filho fd[0] fd[1] fd[0] fd[1] kernel kernel

Pipe half-duplex: canal de comunicação pai -> filho Pipe half-duplex: canal de comunicação pai -> filho 1 i n t paifilho [ ] ; 3 i f ( ( paifilho ) == 1) { / erro / } 5 switch ( f o r k ( ) ) { 6 case 1: 7 p e r r o r ( f o r k ) ; e x i t ( ) ; 8 case 0: / f i l h o / 9 close ( p a i f i l h o [ 1 ] ) ; 10 / / read ( p a i f i l h o [ 0 ],...,... ) 11 break ; 1 default : / pai / 13 close ( p a i f i l h o [ 0 ] ) ; 1 / / w r i t e ( p a i f i l h o [ 1 ],...,... ) 15 wait (NULL ) ; 16 break ; 17 } 1 i n t p ai f i lh o [], i ; 3 i f ( ( paifilho ) == 1) { / erro / } 5 switch ( f o r k ( ) ) { 6 case 1: 7 p e r r o r ( f o r k ) ; e x i t ( ) ; 8 case 0: / f i l h o / 9 close ( p a i f i l h o [ 1 ] ) ; 10 read ( p a i f i l h o [ 0 ], &i, sizeof ( i n t ) ) ; 11 break ; 1 default : / pai / 13 close ( p a i f i l h o [ 0 ] ) ; 1 i = 13; 15 w r i t e ( p a i f i l h o [ 1 ], &i, sizeof ( int ) ) 16 wait (NULL ) ; 17 break ; 18 } Sinal SIGPIPE SIGPIPE Um dos extremos da está fechado Quando um dos extremos da é fechado, aplicam-se as seguintes regras: 1 quando se tenta ler de uma cuja extremidade de escrita já se encontra fechada, a chamada ao sistema read retorna 0 (zero) para indicar o fim do ficheiro. quando se tenta escrever numa cuja extremidade de leitura já se encontra fechada, é gerado o sinal SIGPIPE. Se o sinal for ignorado ou apanhado, a chamada ao sistema write retorna -1 com errno igual a EPIPE. 1 / / includes : s t d i o.h, s t d l i b.h, unistd.h 3 i n t main ( void ) { 5 i n t fd [ ] ; 6 7 i f ( ( fd ) == 1) { 8 p e r r o r ( ) ; e x i t ( 1 ) ; 9 } 10 11 close ( fd [ 0 ] ) ; 1 w r i t e ( fd [ 1 ], Teste\n, 6 ) ; 13 close ( fd [ 1 ] ) ; 1 15 w r i t e (STDOUT FILENO, Fim\n, ) ; 16 17 return 0; 18 }

Sinal SIGPIPE Comunicação via unnamed s SIGPIPE 1 / / includes : s t d i o.h, s t d l i b.h, unistd.h, signal.h 3 i n t main ( void ) { 5 i n t fd [ ] ; 6 7 s i g n a l ( SIGPIPE, SIG IGN ) ; 8 9 i f ( ( fd ) == 1) { p e r r o r ( ) ; e x i t ( 1 ) ; } 10 11 close ( fd [ 0 ] ) ; 1 i f ( w r i t e ( fd [ 1 ], Teste\n, 6) == 1) p e r r o r ( w { r i t e ) ; } 13 close ( fd [ 1 ] ) ; 1 15 w r i t e (STDOUT FILENO, Fim\n, ) ; 16 17 return 0; 18 } Passos 1 criar as s necessárias gerar o(s) processo(s) filho 3 fechar/duplicar descritores de ficheiros para associar correctamente os extremos das s fechar os extremos não necessários 5 realizar as actividades de comunicação 6 fechar restantes descritores de ficheiros 7 se necessário, esperar que os processos filhos terminem Comunicação via unnamed s Exemplo: cat /etc/passwd grep bash Implementar 1 cat /etc/passwd grep bash cat /etc/passwd grep bash wc -l 3 rpm -qa grep ˆvim xargs rpm -ql grep /bin wc -l 1 i n t fd [ ] ; 3 i f ( ( fd ) == 1) { p e r r o r ( ) ; e x i t ( 1 ) ; } 5 switch ( f o r k ( ) ) { 6 case 1: 7 p e r r o r ( f o r k ) ; e x i t ( ) ; 8 case 0: / i l h o / f 9 close ( fd [ 0 ] ) ; 10 dup ( fd [ 1 ], STDOUT FILENO ) ; 11 close ( fd [ 1 ] ) ; 1 execlp ( cat, cat, / etc / passwd, NULL ) ; 13 e x i t ( 3 ) ; 1 default : / pai / 15 close ( fd [ 1 ] ) ; 16 dup ( fd [ 0 ], STDIN FILENO ) ; 17 close ( fd [ 0 ] ) ; 18 execlp ( grep, grep, bash, NULL ) ; 19 e x i t ( ) ; 0 }

Exemplo: cat /etc/passwd grep bash Conteúdo Exercícios 1 i f ( ( fd ) == 1) { p e r r o r ( ) ; e x i t ( 1 ) ; } 3 for ( i =0; i <; i ++) { p = f o r k ( ) ; 5 i f ( p == 1) { 6 p e r r o r ( f o r k ) ; e x i t ( ) ; 7 } else i f ( p == 0) { 8 switch ( i ) { 9 case 0: / p r i m e i r o f i l h o / 10 / /... 11 e x t ( 3 i ) ; 1 case 1: / segundo f i l h o / 13 / /... 1 e x t ( i ) ; 15 } 16 } 17 } 18 19 close ( fd [ 0 ] ) ; close ( fd [ 1 ] ) ; 0 for ( i =0; i <; i ++) { wait (NULL ) ; } 1 Exercícios 3 Referências Exercícios Comunicação via unnamed s Conteúdo Referências Enunciados 1 Processo pai envia um número inteiro para o processo filho. Este multiplica o valor recebido por dois e devolve o resultado ao processo pai. Processo pai envia dois números inteiros para o processo filho. Este adiciona-os e devolve o resultado ao processo pai. 3 Processo pai envia um array de n números inteiros para o processo filho. Este adiciona todos os elementos do array e devolve o resultado ao processo pai. Processo pai envia uma string para o processo filho. Este converte todos os caracteres da string recebida para maiúsculas e devolve a string resultante ao processo pai. 1 Exercícios 3 Referências

Referências Referências Bibliografia Advanced Programming in the UNIX Environment, nd ed. W. Richard Steven, Stephen A. Rago http://www.apuebook.com/ Capítulo 15 - Interprocess Communication Advanced UNIX Programming, nd ed. Marc J. Rochkind http://www.basepath.com/aup/ Capítulo 6 - Basic Interprocess Communication Linux Programming by Example: The Fundamentals Arnold Robbins http://authors.phptr.com/robbins/ Capítulo 9 - Process Management and Pipes