OVH Cloud OVH Cloud

Difference entre open et sysopen

3 réponses
Avatar
P.C.
Bonjour,

pourriez-vous me dire quelle est la différence profonde entre open() et
sysopen(), à part la syntaxe? Est-ce que l'utilisation de sysopen pour lire un
fichier en mode lecture, écriture ou les deux peut être considérée comme une
interaction avec le matériel?

Merci de vos réponses,

amicalement,

P.C.
--
Ce message a été posté via la plateforme Web club-Internet.fr
This message has been posted by the Web platform club-Internet.fr

http://forums.club-internet.fr/

3 réponses

Avatar
Scetbon Cyril
sysopen permet de faire des tests sur l'existence du fichier.
Par exemple, pour créer écrire dans un fichier en s'assurant qu'il
n'existe pas tu peux utiliser la syntaxe suivante:

sysopen OUT,$path,O_WRONLY | O_EXCL | O_CREAT || die $!;

si tu utilises la fonction open il faudra que tu le vérifies par toi
même de la manière suivante:
if(! -e $path)
{
open OUT,'>'.$path || die "$!";
}
else
{
die "File exists";
}

On 28 Jul 2003 09:29:56 GMT, P.C wrote:

Bonjour,

pourriez-vous me dire quelle est la différence profonde entre open() et
sysopen(), à part la syntaxe? Est-ce que l'utilisation de sysopen pour lire un
fichier en mode lecture, écriture ou les deux peut être considérée comme une
interaction avec le matériel?

Merci de vos réponses,

amicalement,

P.C.



--
SCETBON Cyril

Avatar
Ronan Le Hy
P.C. a écrit:
pourriez-vous me dire quelle est la différence profonde entre open() et
sysopen(), à part la syntaxe?


open() fait plein de choses en plus, qui sont décrites dans le joli
manuel. D'ailleurs, celui-ci ajoute:

"If you want a "real" C "open" (see open(2) on your system), then you
should use the "sysopen" function, which involves no such magic (but may
use subtly different filemodes than Perl open(), which is mapped to C
fopen())."
(perldoc -f open)

et:

"If you want the convenience of the shell, then Perl's "open" is
definitely the way to go. On the other hand, if you want finer
precision than C's simplistic fopen(3S) provides, then you should look
to Perl's "sysopen", which is a direct hook into the open(2) system call."
(perldoc perlopentut)

traduction chez Paul:
www.enstimac.fr/Perl/

--
Ronan

Avatar
root
On Mon, 28 Jul 2003 09:29:56 +0000, P. wrote:


Bonjour,

pourriez-vous me dire quelle est la différence profonde entre open() et
sysopen(), à part la syntaxe? Est-ce que l'utilisation de sysopen pour lire un
fichier en mode lecture, écriture ou les deux peut être considérée comme une
interaction avec le matériel?

Merci de vos réponses,

amicalement,



Le sysopen() est en quelque sorte un simple "wrapper" pour le open() de la
libc.

Alors que le open() (de Perl) est de plus haut niveau avec par exemple la
prise en compte de PerlIO pour par exemple convertir le jeux de caractère
d'un fichier a la lecture ou l'écriture de manière transparente ...