Bonjour,
Je développe un programme GTK+, et la question de l'écriture vers des fichiers est un peu confuse pour moi... la glib ne fournit un wrapper pour l'ouverture (g_open) mais pas pour la lecture/écriture d'un fichier...
Je dois donc choisir entre des appels à fwrite ou write. Mais lequel utiliser pour avoir un programme portable (sous linux et windows) ? En gros, guelle sont les différences entre les fonctions read/write/open , etc... et leur équivalent en f* ?
Question subsidiaire: comment savoir de quel header j'ai besoin pour utiliser telle ou telle fonction ? Par exemple, impossible de trouver le header qui me fournit "write", j'ai toujours l'erreur
lvfile.c:87: attention : déclaration implicite de la fonction << write >>
Merci pour votre aide... Tous les conseils sont la bienvenue...
# man
Posté par cho7 (site web personnel) . Évalué à 3.
SYNOPSIS
#include <unistd.h>
ssize_t write(int fd, const void *buf, size_t count);
Voilou,
sinon fwrite c'est du ansi, alors que write c'est du posix. Donc si tu veux une portbilité max, je dirai plutot fwrite
[^] # Re: man
Posté par liberforce (site web personnel) . Évalué à 3.
$ man write
No manual entry for write
En tout cas c'est ce qu'il m'avait semblé comprendre, que fwrite était plus portable, mais alors pourquoi y a pas de wrapper dans la glib pour éviter la confusion ? Hum... Le mystère reste entier... Merci pour ton aide ;-)
[^] # Re: man
Posté par cho7 (site web personnel) . Évalué à 1.
$ man 2 write
Car write n'a pas de pas de manuel autrement, j'ai du tapper dans la section 2 des manuels.
A la fin de man fwrite, ils te le mette d'ailleurs : voir aussi write(2). Tu sais désormais dans quelle section du manuel regarder :)
Sinon les différentes sections de manuels (d'après man man) :
1 Executable programs or shell commands
2 System calls (functions provided by the kernel)
3 Library calls (functions within program libraries)
4 Special files (usually found in /dev)
5 File formats and conventions eg /etc/passwd
6 Games
7 Miscellaneous (including macro packages and conven-
tions), e.g. man(7), groff(7)
8 System administration commands (usually only for root)
9 Kernel routines [Non standard]
[^] # Re: man
Posté par left . Évalué à 3.
Farce ? au contraire, si tu dois faire 'man 2 write', c'est justement parce que généralement il y a aussi un 'write' dans la section 1 des pages de manuel. La commande man parcours l'ensemble des pages de manuel section par section, et séléctionne la première page qui correspond.
Dans le même genre:
$ man printf -> manuel de printf du shell
$ man 3 printf -> manuel de printf du langage C
pour t'en convaincre, et si c'est installé sur ta machine: xman, qui est une GUI au pages de manuel.
[^] # Re: man
Posté par cho7 (site web personnel) . Évalué à 2.
J'avais,une idée de phrase en tête, j'ai changé de tournure au dernier moment, et ca donne un truc bizarre. :)
[^] # Re: man
Posté par liberforce (site web personnel) . Évalué à 2.
$ man 2 write
No entry for write in section 2 of the manual
Apparemment, ce n'est pas fourni avec mon cygwin...
[^] # Re: man
Posté par kolter (site web personnel, Mastodon) . Évalué à 3.
write est plus bas niveau que fwrite et bien moins pratique à utiliser !
M.
[^] # Re: man
Posté par liberforce (site web personnel) . Évalué à 2.
[^] # Re: man
Posté par Nicolas Boulay (site web personnel) . Évalué à 2.
"La première sécurité est la liberté"
[^] # Re: man
Posté par RedIsDead . Évalué à 2.
C'est justement ce que charge de faire pour toi fwrite en mettant temporairement tout ce que tu veux ecrire dans un buffer et une fois que c'est plein, un gros write.
# g_io_channel
Posté par Arnaud . Évalué à 2.
Ça donne du code qui ressemble à ça:
GIOChannel *chan = g_io_channel_new_file ("monfichier.txt", ...);
g_io_channel_set_encoding (chan, "ISO-8859-1", ...);
...
g_io_channel_read (chan, pointeur buffer, nb_octets à lire, pointeur nb octets lus);
...
g_io_channel_write (chan, pointeur buffer, nb octets à écrire, pointeur nb octets écrits)
...
g_io_channel_close (chan);
(bien sur, tester tous les retour de g_io_channel_* pour gérer proprement les erreurs)
[^] # Re: g_io_channel
Posté par liberforce (site web personnel) . Évalué à 2.
Je m'attendais à trouver au moins une référence dans les "file utilities" de la glib ( http://developer.gnome.org/doc/API/2.0/glib/glib-File-Utilit(...) ). Mais non, rien... Je pense que ça va finir en question sur la mailing list gnome-love...
[^] # Re: g_io_channel
Posté par Arnaud . Évalué à 1.
IO Channels - portable support for using files, pipes and sockets.
Je pense que si c'est peu utilisé, c'est que ça n'a pas encore été "approrié" par les développeurs. Et puis de toute façon plein de programmeurs s'appuies sur le VFS. Enfin, simple supposition, mon dada principal, c'est C++/Qt ;-)
[^] # Re: g_io_channel
Posté par liberforce (site web personnel) . Évalué à 2.
# glib 2.8
Posté par Christophe Fergeau . Évalué à 2.
[^] # Re: glib 2.8
Posté par liberforce (site web personnel) . Évalué à 2.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.