Salut,
J'ai matté dans la doc, mais je n'ai pas trouvé d'équivalent du mkfifo C en PERL...
Il existe ?
Sinon, faut que fasse comment ? system("mkfifo fichier") ?
Ca me parait lourd, non ?
Merci de vos reponses !
Salut,
J'ai matté dans la doc, mais je n'ai pas trouvé d'équivalent du mkfifo C en PERL...
Il existe ?
Sinon, faut que fasse comment ? system("mkfifo fichier") ?
Ca me parait lourd, non ?
Merci de vos reponses !
Désolé d'être con mais que fait la fonction mkfifo en C ?
Tu sais, tous les programmeurs Perl ne viennent pas du C ...![]()
Ca créé un tube nommé (en fait un fichier) : tu écris des données dedans, et de l'autre coté tu les lis... Ca permet de faire de la communication inter-processus.
Ok !Envoyé par Gogoye
![]()
Alors pour la gestion des pipe, va faire un tour dans la doc de Perl, + précisément perlfunc et regarde un peu tout ce que fait la fonction open().
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 open FILEHANDLE,MODE,LIST open FILEHANDLE,EXPR open FILEHANDLE Opens the file whose filename is given by EXPR, and associates it with FILEHANDLE. If FILEHANDLE is an expression, its value is used as the name of the real filehandle wanted. (This is considered a symbolic reference, so use strict 'refs' should not be in effect.) If MODE is '<' or nothing, the file is opened for input. If MODE is '>', the file is truncated and opened for output, being created if necessary. If MODE is '>>', the file is opened for appending, again being created if necessary. You can put a '+' in front of the '>' or '<' to indicate that you want both read and write access to the file; thus '+<' is almost always preferred for read/write updates--the '+>' mode would clobber the file first. You can't usually use either read-write mode for updating textfiles, since they have variable length records. See the -i switch in the perlrun manpage for a better approach. The file is created with permissions of 0666 modified by the process' umask value.
Bein, open ouvre/crée un fichier normal, pas un tube nommé.
Tu peux trouver une bonne doc en PDF et en français iciEnvoyé par Gogoye
Page 95 de la doc, je lis ceci :
Si le nom de fichier commence par ’|’, le nom de fichier est interprété comme une commande vers laquelle seront dirigées
les sorties (via un tube – en anglais pipe) et si le nom de fichier se termine par ’|’, le nom de fichier est interprété comme une
commande dont la sortie sera récupérée (via un tube – en anglais pipe).
Sisi, tu peux faire des pipes nommés avec perl : sur Linux, le plus simple est d'utiliser system pour faire le lien avec la commande système mknod ou mkfifo, ensuite, tu peux utiliser open pour ouvrir ce FIFO comme un fichier normal, (va voir perlipc pour un exemple), sur Windows, il y a un module qui te permet de faire des fifo, il est dans le core d'au moins ActivePerl, dans la hiérarchie Win32 je crois. Si tu veux un truc portable je ne sais pas si ça existe, vu que je ne suis pas sûr que FIFO désigne vraiment la même chose sur tous les systèmes mais tu peux toujours fouiller sur le CPAN.![]()
(par contre Arioch tu ne peux pas faire de pipes nommés avec open, juste un pipe entre deux processus)
Il y a peut-être un module qui permet de faire ça de façon plus confortable sur Unix/Linux dans le core, mais je ne suis pas sûr.
Envoyé par Gogoye
c'est le plus simple![]()
Je n'y avais pas pensé plus tôt, mais si c'est juste la fonction du C que tu cherche, elle est dans le module POSIX (du core), après, c'est à toi de voir si ça en vaut le coup ou si un simple system( "mkfifo..") ne ferait pas aussi bien...![]()
C'est à dire ? Tu veux dire que c'est une fonction standard du C, ou que c'est intégré à Perl, mais qu'il faut faire un truc spécial pour l'utiliser ?elle est dans le module POSIX (du core)
Pour ce qui est du premier cas, je le sais deka, mais peut-on utiliser des fonction prevenant du C directement en Perl ?[/quote]
Non non, le module POSIX te met cette fonction (ainsi que plein d'autres) à ta disposition, il s'agit d'un module qui forme une interface entre le Perl et des fonctions standard Posix de bas niveau (du C, mais théoriquement, ces fonctions sont standard et ne se limitent pas au C, elles sont implémentés dans d'autres langages aussi), pour utiliser mkfifo dans ton programme, tu peux faire ainsi :
Si tu ne connais pas les modules, renseigne-toi au plus vite, c'est une connaissance vraiment indispensable pour apprécier le Perl.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 use POSIX qw(mkfifo); mkfifo( "/FIFO_PREMIER" ); #je ne connais pas la syntaxe de mkfifo...![]()
Partager