Si j'ai un programme qui crée et tente d'ouvrir un tube nommé en utilisant mkfifo, comment puis-je ouvrir un tube pour lire ou écrire sans bloquer? En particulier, j'écris un programme C qui peut être exécuté avec ou sans gui (écrit en Java).Comment effectuer une fopen non bloquante sur un tube nommé (mkfifo)?
Dans le programme C, je crée avec succès les tuyaux nommés avec mkfifo, mais quand je fais
FILE* in = fopen(PIPE_IN, "r"); /* Where PIPE_IN is the filename*/
fopen ne retourne pas jusqu'à ce que l'interface utilisateur graphique ouvre ce tuyau pour l'écriture. Ce que je souhaite faire est d'avoir ce tuyau prêt à être lu une fois (si) l'interface graphique décide d'y écrire - je mettrai le descripteur de fichier dans un appel select(). Il est raisonnable de s'attendre à ce que l'interface graphique Java ne soit jamais réellement démarrée, donc je ne peux pas compter sur elle pour ouvrir l'autre extrémité du tuyau à un point spécifique ou même du tout.
Je vais aussi avoir un deuxième tuyau ouvert pour l'écriture, et je suppose que je vais avoir le même problème. En outre, je ne peux pas définir O_NONBLOCK sur un tube de sortie qui n'a pas de lecteur.
Des suggestions?
(Ceci est en cours d'exécution sur un système Linux)
Avez-vous besoin d'ouvrir le tuyau de sortie avant de sélectionner() le tir sur le tuyau d'entrée? –
@tinkertim - Je suppose que techniquement non - je les ai tous les deux mis en place dans une fonction de configuration, mais je pourrais simplement configurer le tube de sortie d'abord, puis appeler select, pourquoi? – Zxaos