Conversando programas [RESOLVIDO]

1. Conversando programas [RESOLVIDO]

Jefferson Quesado
JeffQue

(usa Ubuntu)

Enviado em 02/02/2009 - 21:21h

Pessoal,

Estou com um pequeno probleminha num campo um tanto quanto teórico, e infelizmente meu pc com Linux está na "UTI"...

O problema é: dado um programa p1 e outro p2, fazê-los conversar; tipo, a saída de dados de p1 é a entrada de p2 e a entrada de dados de p1 é a saída de p2.

Ouvi falar que a solução é utilizando sockets, porém pouco vi de utilização de sockets entre dois processos do mesmo computador (e, como acima dito, estou sem meu Linux u.u)...

Alguém poderia me dar uma luz?, explicando-me mais ou menos o funcionamento de sockets para gerenciar I/O de processos internos ao mesmo pc ou uma outra solução para o problema de fazer dois programas conversarem (sem envolver simular arquivos no HD como streams)?

Abraços
Jefferson Quesado


  


2. MELHOR RESPOSTA

Denis Doria
thuck

(usa Debian)

Enviado em 02/02/2009 - 23:01h

Bem a idéia de memória compartilhada é essa, um buffer... Um tamanho X "fixo" que vc inseri e retira, um simples produtor consumidor. Pela sua descrição vc quer um produtor/consumidor, oq sinceramente depois q vc aprende a fazer produtores e consumidores é trivial.
O fluxo seria bem simples:
PA = processo A
PB = processo B
QA = fila que A inseri
QB = fila que B inseri

vc informa alguma entrada p/ que eles possam começar o trabalho, então:

PA verifica se há alguma coisa em QB
Sim, existe PA remove de QB e processa
PA escreve em QA
PB verifica se há alguma coisa em QA
Sim, existe PB remove de QA e processa

... O maior problema que vc terá com isso é a possibilidade de deadlocks...


3. Re: Conversando programas [RESOLVIDO]

Denis Doria
thuck

(usa Debian)

Enviado em 02/02/2009 - 22:45h

Bem, usar sockets nesse caso é simplesmente inútil, a não ser que vc precise rodar isso em duas máquinas distintas. Se vc for rodar em uma única máquina melhor usar memória compartilhada, oq pode ser bem simples dependendo da linguagem de programação escolhida.
Se fosse usar python por exemplo (e para facilitar a minha vida), usaria a biblioteca processing (multi-processos) junto duas queues (memória compartilhada), sendo que cada uma leria de uma e escreveria em outra. Fazer isso em python é razoavelmente simples, em C é mais complicado, mas usar memória compartilhada é algo amplamente divulgado nas implementações de IPCs.



4. Re: Conversando programas [RESOLVIDO]

Jefferson Quesado
JeffQue

(usa Ubuntu)

Enviado em 02/02/2009 - 22:52h

http://www.inf.ufsc.br/~rrf/sockets_texto.pdf

Nas primeiras páginas ele fala de sockets locais e dá até um desenhozinho colorido sobre isso, sem falar que o um professor da faculdade havia me sugerido tentar por socket.

Mas, boa idéia essa da memória compartilhada, é algo ainda a se ver, pra ver se eu consigo coisar isso do jeito que eu quero.

Mas, ao usar o compartilhamento de memória, eu consigo usar essa memória comparilhada como alguma forma de stream ou buffer? (ó, céus, perdoai-me por minha santa ignorância!)


5. Re: Conversando programas [RESOLVIDO]

Jefferson Quesado
JeffQue

(usa Ubuntu)

Enviado em 03/02/2009 - 16:08h

Ok, valeu a solução!

Assim que eu tiver meu pc de volta eu estudo isso =p

Abraço!






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts