Putchar et write

kaervas -  
 kaervas -
Bonjour, j'utilise VisualC++ 6 et je programme en C, je ne veux pas utiliser d'include, et j'ai recoder certaines fonctions système, mais j'ai un problème avec "ma" version de putchar, j'utilise write (là je suis bien obliger d'utiliser une fonction system, à moins qu'on puisse la recoder aussi?), je la prototype, et j'ai le message d'erreur suivant :

1.obj : error LNK2001: unresolved external symbol "void __cdecl write(int,void *,int)" (?write@@YAXHPAXH@Z)
Debug/1.exe : fatal error LNK1120: 1 unresolved externals

Quelqu'un pourrait m'aider?
Le code que j'ai utiliser pour my_putchar :

void write(int fd, void *tamp,int n);

void my_putchar(char c)
{ write(1, &c, 1); }

4 réponses

mamiemando Messages postés 33772 Date d'inscription   Statut Modérateur Dernière intervention   7 882
 
Euh normalement :
#include <unistd.h>
ssize_t write(int fd, const void *buf, size_t count);

Mais pourquoi tu ne veux pas utiliser d'include ??
0
kaervas
 
J'ai envie de me refaire les libs et de ne travailler qu'avec ce que j'ai fait, pour l'experience :)
merci pour la reponse mais il y a encore un include, j aimerais avoir le code exact que l include utilise pour faire marcher write (en plus je n ai pas pu tester cet include parcequ a priori windows ne l a pas!)
0
mamiemando Messages postés 33772 Date d'inscription   Statut Modérateur Dernière intervention   7 882
 
Ben ouvre le fichier inclu et tu verras le code (plus exactement le fichier source associé à ce header).

Enfin pour la culture c'est bien mais sinon je vois pas trop l'interêt. Il y a des centaines de gourous qui se sont pris la ête à faire un truc qui marche, pourquoi ne pas le réutiliser ?

Et pour ton excuse sur les include tu invoques la protabilité. Sache qu'il suffit de changer à ce moment là les headers spécifiques linux inclus avec une option de compilation (idem avec windows). Par exemple :

#ifdef LINUX
#include <unistd.h>
#endif

#ifdef WINDOWS
#include <...>
#endif


Et à la compilation (sous linux par exemple)
gcc -DLINUX plop.c

Et encore, la majorité des include "classiques" sont communs entre les deux OS...

Bonne chance
0
kaervas
 
J'avais ouvert stdio.h pour voir ce qu'il y avait comme code pour putchar mais je n'ai rien compris.. Il faisait un define de write en mettant en macro un putc, si je me souviens bien, enfin je n'ai pas tout saisi..
Pour la lib oui je n'ai pas d'excuse.. en fait je viens de netbsd et j'avais deja recode mes libs, et write ne me posait pas de prob sans mettre d'include, meme avec un gcc -Wall -pedantic, c'est pour ca que je trouvais le probleme etrange sous windoze.
0