Nelson Pires
Power Member
Boa noite,
Estou com um problema a correr código na máquina virtual (linux).
O código consiste num pipe em que o "pai" envia uma mensagem e o "filho" recebe-a e escreve o que recebe que neste caso é um número random que calhou ao "pai".
O que acontece é que só por vezes (muito raramente e a insistir muito) é que o filho recebe a "mensagem" na máquina virtual.
O código é o seguinte:
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
import os
import random
num = random.randint(0,100)
nomepipe = 'number_prime'
if not os.path.exists(nomepipe):
os.mkfifo('nomepipe')
def filho():
pipei = open(nomepipe,'r')
mensagem = pipei.readline()
print ("Recebi", mensagem)
res = is_prime(num)
print(res)
def pai():
s=str(num)
pipei = open(nomepipe, 'w')
pipei.write(s)
print ("o pai enviou ",s)
def is_prime(n):
'''check if integer n is a prime'''
# make sure n is a positive integer
n = abs(int(n))
# 0 and 1 are not primes
if n < 2:
return False
# 2 is the only even prime number
if n == 2:
return True
# all other even numbers are not primes
if not n & 1:
return False
# range starts with 3 and only needs to go up
# the square root of n for all odd numbers
for x in range(3, int(n ** 0.5) + 1, 2):
if n % x == 0:
return False
return True
pid = os.fork()
if pid != 0:
pai()
else:
filho()
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
Resultado na máquina virtual:
nelson@debian:~$ python3 exercicio1.py
o pai enviou 33
Recebi
nelson@debian:~$ python3 exercicio1.py
o pai enviou 89
Recebi
nelson@debian:~$ python3 exercicio1.py
o pai enviou 23
Recebi
nelson@debian:~$ python3 exercicio1.py
o pai enviou 63 ------------> só aqui é que mostra a mensagem que o filho recebeu
Recebi 63
nelson@debian:~$ python3 exercicio1.py
o pai enviou 33
Recebi
...
...
Já enviei o ficheiro para uns colegas meus e nas máquinas deles funciona perfeitamente, apenas no meu é que acontece isto. Até perguntei ao meu stor e ele também não encontrou a solução.
Peço desculpa se não me expressei bem, mas tentei fazer o melhor possível para perceberem a minha situação...
Obrigado
Estou com um problema a correr código na máquina virtual (linux).
O código consiste num pipe em que o "pai" envia uma mensagem e o "filho" recebe-a e escreve o que recebe que neste caso é um número random que calhou ao "pai".
O que acontece é que só por vezes (muito raramente e a insistir muito) é que o filho recebe a "mensagem" na máquina virtual.
O código é o seguinte:
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
import os
import random
num = random.randint(0,100)
nomepipe = 'number_prime'
if not os.path.exists(nomepipe):
os.mkfifo('nomepipe')
def filho():
pipei = open(nomepipe,'r')
mensagem = pipei.readline()
print ("Recebi", mensagem)
res = is_prime(num)
print(res)
def pai():
s=str(num)
pipei = open(nomepipe, 'w')
pipei.write(s)
print ("o pai enviou ",s)
def is_prime(n):
'''check if integer n is a prime'''
# make sure n is a positive integer
n = abs(int(n))
# 0 and 1 are not primes
if n < 2:
return False
# 2 is the only even prime number
if n == 2:
return True
# all other even numbers are not primes
if not n & 1:
return False
# range starts with 3 and only needs to go up
# the square root of n for all odd numbers
for x in range(3, int(n ** 0.5) + 1, 2):
if n % x == 0:
return False
return True
pid = os.fork()
if pid != 0:
pai()
else:
filho()
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
Resultado na máquina virtual:
nelson@debian:~$ python3 exercicio1.py
o pai enviou 33
Recebi
nelson@debian:~$ python3 exercicio1.py
o pai enviou 89
Recebi
nelson@debian:~$ python3 exercicio1.py
o pai enviou 23
Recebi
nelson@debian:~$ python3 exercicio1.py
o pai enviou 63 ------------> só aqui é que mostra a mensagem que o filho recebeu
Recebi 63
nelson@debian:~$ python3 exercicio1.py
o pai enviou 33
Recebi
...
...
Já enviei o ficheiro para uns colegas meus e nas máquinas deles funciona perfeitamente, apenas no meu é que acontece isto. Até perguntei ao meu stor e ele também não encontrou a solução.
Peço desculpa se não me expressei bem, mas tentei fazer o melhor possível para perceberem a minha situação...
Obrigado
Última edição: