import os, sys

def canonada(nProc,nomp,nompf):
    entSTD=sys.stdin.fileno()
    sorSTD=sys.stdout.fileno()
    sorp,entp=os.pipe()
    for i in range(nProc-1):
        sorp=creaFilConnectat(sorp, nomp)
    sorp=creaFilConnectat(sorp, nompf)

    c= os.read(entSTD,1)
    while len(c)!=0:
        os.write(entp, c)
        c= os.read(entSTD,1)

    c = os.read(sorp,1)
    while len(c)!=0:
        os.write(sorSTD,c) # També sys.stdout.write(str(c,'UTF-8'))
        c = os.read(sorp,1)
    os.write(sorSTD,bytes('\n','UTF-8')) # També  sys.stdout.write('\n')
    return os.EX_OK


   def creaFilConnectat(sorAnt, executable):
        sor, ent=os.pipe() # crea un pipe a la banda dreta */
        idProces = os.fork()
        if idProces != 0: # pare 
            os.close(ent)
            os.close(sorAnt)
        else:
            #                                  procés         
            #        +-----+                   +-----+        
            #  in -->|ant. |-->sorAnt       +->| fill|--+     
            #        +-----+                |  +-----+  |     
            #                               |           |                     
            #                               |  +-+-+    |                     
            #                           sor +--|0|1|<---+ ent   
            #                                  +-+-+pipe                      
            #>>>>>>> COMPLETEU AQUÍ CODI PER FER LES CONNEXIONS PREVISTES
       #                                  procés
       #        +-----+                   +-----+             
       #  in -->|ant. |------------------>| fill|--+ stdout   
       #        +-----+sorAnt      stdin  +-----+  |          
       #                                           |          
       #                                  +-+-+    |          
       #                             sor--|0|1|<---+          
       #                                  +-+-+pipe           
            os.close(sorAnt)    # Donem de baixa les posicions 4a i 5a 
                                   # de la taula E/S   
            os.close(ent)
      # encavalcament amb el programa 'executable'
      #>>>>>>>> COMPLETEU AQUÍ CODI PER FER QUE AQUEST PROCÉS
      #>>>>>>>> SIGUI EL PROGRAMA QUE HA D'EXECUTAR-SE
            os.exit(0)
        return(sor)

