# Code source de la fonction printf

**URL:** <https://www.debian-fr.org/t/code-source-de-la-fonction-printf/32183>\
**Category:** Programmation\
**Created:** [Février 21, 2016, 2:12 UTC](https://www.debian-fr.org/t/code-source-de-la-fonction-printf/32183 "2016-02-21T02:12:34Z")\
**Posts on this page:** 17\
**Page:** 1

<div class="post-metadata">

**Author:** ![zerimbak](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/z/cc9497/32.png) [@zerimbak](https://www.debian-fr.org/u/zerimbak)\
**Post date:** [Février 21, 2016, 2:12 UTC](https://www.debian-fr.org/t/code-source-de-la-fonction-printf/32183/1 "2016-02-21T02:12:34Z")

</div>

Bonsoir,

Quelqu’un pourrait-il m’indiquer comment obtenir le code source de la fonction printf.  
merci

---

<div class="post-metadata">

**Author:** ![fran.b](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/f/d78d45/32.png) [@fran.b](https://www.debian-fr.org/u/fran.b)\
**Post date:** [Février 21, 2016, 2:12 UTC](https://www.debian-fr.org/t/code-source-de-la-fonction-printf/32183/2 "2016-02-21T02:12:34Z")

</div>

C’est une fonction de base de C, elle est donc dans les sources de gcc (libstdc je pense)

---

<div class="post-metadata">

**Author:** ![mont](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/eb8c5e/32.png) [@mont](https://www.debian-fr.org/u/mont)\
**Post date:** [Février 21, 2016, 2:12 UTC](https://www.debian-fr.org/t/code-source-de-la-fonction-printf/32183/3 "2016-02-21T02:12:34Z")

</div>

Ben, ça devrait être dans le code de la libc (sous linux, en tout cas), non ? Et la libc fait partie du projet GNU, si je ne dis pas de bêtise…

Deux secondes de recherche sous 10^100 donnent : [ftp.gnu.org/gnu/glibc/glibc-2.13.tar.xz](http://ftp.gnu.org/gnu/glibc/glibc-2.13.tar.xz) pour le code source) 😈

---

<div class="post-metadata">

**Author:** ![zerimbak](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/z/cc9497/32.png) [@zerimbak](https://www.debian-fr.org/u/zerimbak)\
**Post date:** [Février 21, 2016, 2:12 UTC](https://www.debian-fr.org/t/code-source-de-la-fonction-printf/32183/4 "2016-02-21T02:12:37Z")

</div>

j’ai téléchargé le fichier glibc-2.13.tar.xz mais je ne parviens pas à le décompresser.  
Quelle est la commande ? j’ai essayé tar xvf nomdufichier mais ça ne marche pas

---

<div class="post-metadata">

**Author:** ![M3t4linux](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/5daacb/32.png) [@M3t4linux](https://www.debian-fr.org/u/M3t4linux)\
**Post date:** [Février 21, 2016, 2:12 UTC](https://www.debian-fr.org/t/code-source-de-la-fonction-printf/32183/5 "2016-02-21T02:12:37Z")

</div>

Pour décompresser :

xz --decompress glibc-2.13.tar.xz

Pour “dé-tarer”

tar -xvf glibc-2.13.tar

---

<div class="post-metadata">

**Author:** ![fran.b](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/f/d78d45/32.png) [@fran.b](https://www.debian-fr.org/u/fran.b)\
**Post date:** [Février 21, 2016, 2:12 UTC](https://www.debian-fr.org/t/code-source-de-la-fonction-printf/32183/6 "2016-02-21T02:12:38Z")

</div>

Dans les sources de gcc, tu trouves

[quote] int  
printf VPARAMS ((const char \*format, …))  
{  
int result;

```
       VA_OPEN (ap, format);
       VA_FIXEDARG (ap, const char *, format);

       result = vfprintf (stdout, format, ap);
       VA_CLOSE (ap);

       return result;
    }

```

[/quote]

Après il faut chercher vfprintf, mais là ça se complique. Tu as sans doute une redédifinition de printf dans la libc6 ou mieux, la dietlibc plus petite.

[code]#include \<stdarg.h\>  
#include \<unistd.h\>  
#include “dietstdio.h”

int \_\_stdio\_outs(const char \*s,size\_t len) **attribute** ((weak));  
int \_\_stdio\_outs(const char \*s,size\_t len) {  
return (write(1,s,len)==(ssize\_t)len)?1:0;  
}

int vprintf(const char _format, va\_list ap)  
{  
struct arg\_printf \_ap = { 0, (int(_)(void\*,size\_t,void\*)) \_\_stdio\_outs };  
return \_\_v\_printf(&\_ap,format,ap);  
}  
[/code]  
puis enfin

[code]int \_\_v\_printf(struct arg\_printf\* fn, const char \*format, va\_list arg\_ptr)  
{  
unsigned int len=0;  
#ifdef WANT\_ERROR\_PRINTF  
int \_errno = errno;  
#endif

while (\*format) {  
unsigned long sz = skip\_to(format);  
if (sz) {  
B\_WRITE(fn,format,sz); len+=sz;  
format+=sz;  
}  
if (_format==’%’) {  
char buf[128];  
union { char_s; } u\_str;  
#define s u\_str.s

```
  int retval;
  unsigned char ch, padwith=' ', precpadwith=' ';

  char flag_in_sign=0;
  char flag_upcase=0;
  char flag_hash=0;
  char flag_left=0;
  char flag_space=0;
  char flag_sign=0;
  char flag_dot=0;
  signed char flag_long=0;

  unsigned int base;

```

[…]  
[/code]Bref, tu peux charger les sources que tu veux, prends les sources dietlibc-dev par exemple.  
(apt-get source dietlibc-dev)

Pour ta question: xz -d fichier.tar.xz puis tar xf fichier.tar ou tar xJf fichier.tar.xz)

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 21, 2016, 2:12 UTC](https://www.debian-fr.org/t/code-source-de-la-fonction-printf/32183/7 "2016-02-21T02:12:42Z")

</div>

[quote=“mont”]Ben, ça devrait être dans le code de la libc (sous linux, en tout cas), non ? Et la libc fait partie du projet GNU, si je ne dis pas de bêtise…

Deux secondes de recherche sous 10^100 donnent : [ftp.gnu.org/gnu/glibc/glibc-2.13.tar.xz](http://ftp.gnu.org/gnu/glibc/glibc-2.13.tar.xz) pour le code source) 😈 [/quote]  
C’est le cas de la glibc, mais il y en a d’autres comme bionic de Google.

[quote=“M3t4linux”]Pour décompresser :

xz --decompress glibc-2.13.tar.xz

Pour “dé-tarer”

tar -xvf glibc-2.13.tar[/quote]  
ou `tar xvJf glibc-2.13.tar.xz`

---

<div class="post-metadata">

**Author:** ![zerimbak](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/z/cc9497/32.png) [@zerimbak](https://www.debian-fr.org/u/zerimbak)\
**Post date:** [Février 21, 2016, 2:12 UTC](https://www.debian-fr.org/t/code-source-de-la-fonction-printf/32183/8 "2016-02-21T02:12:55Z")

</div>

je n’ai pas la commande xz et je n’ai pas trouvé le paquet à installer pour obtenir cette commande.  
je précise que j’utilise debian lenny

---

<div class="post-metadata">

**Author:** ![zerimbak](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/z/cc9497/32.png) [@zerimbak](https://www.debian-fr.org/u/zerimbak)\
**Post date:** [Février 21, 2016, 2:12 UTC](https://www.debian-fr.org/t/code-source-de-la-fonction-printf/32183/9 "2016-02-21T02:12:55Z")

</div>

tar xvJf glibc-2.13.tar.xz ne marche pas non plus  
tar : l’option « – J » n’est pas valable

---

<div class="post-metadata">

**Author:** ![M3t4linux](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/5daacb/32.png) [@M3t4linux](https://www.debian-fr.org/u/M3t4linux)\
**Post date:** [Février 21, 2016, 2:12 UTC](https://www.debian-fr.org/t/code-source-de-la-fonction-printf/32183/10 "2016-02-21T02:12:55Z")

</div>

C’est le paquet xz-utils

---

<div class="post-metadata">

**Author:** ![zerimbak](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/z/cc9497/32.png) [@zerimbak](https://www.debian-fr.org/u/zerimbak)\
**Post date:** [Février 21, 2016, 2:12 UTC](https://www.debian-fr.org/t/code-source-de-la-fonction-printf/32183/11 "2016-02-21T02:12:55Z")

</div>

même problème avec la commande :  
tar xjf glibc-2.13.tar.xz  
bzip2: (stdin) is not a bzip2 file.  
tar: Child returned status 2  
tar: Des erreurs ont provoqué l’arrêt du programme

---

<div class="post-metadata">

**Author:** ![zerimbak](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/z/cc9497/32.png) [@zerimbak](https://www.debian-fr.org/u/zerimbak)\
**Post date:** [Février 21, 2016, 2:12 UTC](https://www.debian-fr.org/t/code-source-de-la-fonction-printf/32183/12 "2016-02-21T02:12:55Z")

</div>

je n’ai pas réussi à installé le paquet xz-utils (non trouvé)  
quel dépôt faut-il ?  
voici mes dépôts :

deb [ftp.fr.debian.org/debian/](http://ftp.fr.debian.org/debian/) lenny main  
deb-src [ftp.fr.debian.org/debian/](http://ftp.fr.debian.org/debian/) lenny main

deb [security.debian.org/](http://security.debian.org/) lenny/updates main  
deb-src [security.debian.org/](http://security.debian.org/) lenny/updates main

deb [volatile.debian.org/debian-volatile](http://volatile.debian.org/debian-volatile) lenny/volatile main  
deb-src [volatile.debian.org/debian-volatile](http://volatile.debian.org/debian-volatile) lenny/volatile main

---

<div class="post-metadata">

**Author:** ![mont](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/eb8c5e/32.png) [@mont](https://www.debian-fr.org/u/mont)\
**Post date:** [Février 21, 2016, 2:12 UTC](https://www.debian-fr.org/t/code-source-de-la-fonction-printf/32183/13 "2016-02-21T02:12:56Z")

</div>

Oh, come on, man…

Si t’arrives pas à extraire le xz (ce qui est possible, ’serait temps de passer à Squeeze, peut-être !), récupère la version gz ou bz2 ([ftp.gnu.org/gnu/glibc/glibc-2.13.tar.bz2](http://ftp.gnu.org/gnu/glibc/glibc-2.13.tar.bz2)) ![:013](https://www.debian-fr.org/uploads/default/original/1X/086709e9e4d48f0fa24e42243bbce857fc2be47f.gif "colere")

---

<div class="post-metadata">

**Author:** ![fran.b](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/f/d78d45/32.png) [@fran.b](https://www.debian-fr.org/u/fran.b)\
**Post date:** [Février 21, 2016, 2:13 UTC](https://www.debian-fr.org/t/code-source-de-la-fonction-printf/32183/14 "2016-02-21T02:13:03Z")

</div>

tar xJf et non xjf, c’est un j majuscule.

apt-get source libc6-dev  
ou bien  
apt-get source dietlibc-dev

Tu te compliques la vie.

---

<div class="post-metadata">

**Author:** ![zerimbak](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/z/cc9497/32.png) [@zerimbak](https://www.debian-fr.org/u/zerimbak)\
**Post date:** [Février 21, 2016, 2:14 UTC](https://www.debian-fr.org/t/code-source-de-la-fonction-printf/32183/15 "2016-02-21T02:14:31Z")

</div>

j’ai finalement opté pour la solution la plus simple :  
apt-get source libc6-dev

par contre je suis allé dans /usr/src et je n’ai pas trouvé les sources …

---

<div class="post-metadata">

**Author:** ![fran.b](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/f/d78d45/32.png) [@fran.b](https://www.debian-fr.org/u/fran.b)\
**Post date:** [Février 21, 2016, 2:14 UTC](https://www.debian-fr.org/t/code-source-de-la-fonction-printf/32183/16 "2016-02-21T02:14:32Z")

</div>

apt-get source libc-dev te crée un répertoire glibc-??? contenant les sources (déplié en général) de la libc6. Tu trouveras un xz statique ici: [http://boisson.homeip.net/debian/xz](http://boisson.homeip.net/debian/xz)

---

<div class="post-metadata">

**Author:** ![AnatomicJC](https://www.debian-fr.org/user_avatar/www.debian-fr.org/anatomicjc/32/3869_2.png) [@AnatomicJC](https://www.debian-fr.org/u/AnatomicJC)\
**Post date:** [Février 21, 2016, 2:14 UTC](https://www.debian-fr.org/t/code-source-de-la-fonction-printf/32183/17 "2016-02-21T02:14:37Z")

</div>

Quand je télécharge des sources avec apt-get source, ces sources se mettent dans le répertoire où tu te trouves, pas /usr/src/.
