Implémentation de read

Implémentation de read - C - Programmation

Marsh Posté le 12-01-2012 à 21:42:02    

Bonjour,
 
J'aurais aimé savoir si il existe une implémentation de la fonction read standard (et write tant qu'on y est), et ou est-ce que je pourrais me procurer ces sources.
 
J'imagine que c'est lié à libc ou glibc. Les sources que j'arrive à trouver sont des fichiers permettant de faire un build, mais c'est assez obscure (je n'arrive pas à trouver les sources en elles-même). Est-ce qu'il existe un explorateur de telle ou telle implémentation d'une libc ? (Peu m'importe que ce soit BSD, MacOS, GNU...).
 
J'imagine que de telles implémentations sont faites en assembleur ? Si ce n'est pas le cas, je suis en fait à la recherche de fonctions qui me permettrait de les réécrire.
 
--Vous n'êtes pas obligé de lire la suite pour participer au fil--
Juste afin d'expliquer exactement le pourquoi de ma recherche : Je suis étudiant en info, et il nous est demandé une fonction permettant de lire n octets à partir d'un descripteur de fichier, pour les mettre dans un buffer (il est donné char*, mais un void* ferait tout aussi bien l'affaire j'ai l'impression). Il nous est aussi demandé de nous comporter exactement comme la fonction read. En l'occurence, ne me posant pas trop de question, j'ai fais quelque chose comme
return read(fd, buffer, n);
Ne trouvant pas de primitives applicables.
Je me doute donc que si le prof nous a donné un tel devoir (en fait il ne nous l'a pas encore donné, je m'avance un peu dans le travail à faire), c'est qu'il y a autre chose à faire. Ou alors c'est un troll.
Bref, ce n'est pas une question urgente, mais ça pique ma curiosité.
 
Merci d'avance ! ;)

Reply

Marsh Posté le 12-01-2012 à 21:42:02   

Reply

Marsh Posté le 12-01-2012 à 22:44:53    

Le code source des fonctions "read" et "write" dans la libc tient probablement en une ligne de code: faire un appel système au noyau. Le gros du travail est en fait effectué par le noyau du système d'exploitation, et j'imagine que l'appel système en question doit lui-même tenir en seulement quelques lignes, le temps de rediriger la requète vers le bon driver: réseau, système de fichier, tube de communication, .... là où se trouve la plus grande partie du code. Bref, tu cherches au mauvais endroit si tu veux le détail de l'implémentation.
 
Sinon il existe une autre famille de fonction: la famille stdio. Des fonctions comme fread/fwrite/fputc/fgetc/.... sont en fait basées sur les fonctions read/write. Reprogrammer read/write n'a pas vraiment d'intérêt, car il faut connaître tous les détails du système qu'il y a en-dessous (système de fichier, socket TCP (ha, ha, bon courrage), ...), et autant dire qu'il y en a pour des mois à ne supporter ne serait-ce qu'un seul type de périphérique. Reprogrammer les fonctions stdio pourrait avoir un intérêt cela dit.

Reply

Marsh Posté le 12-01-2012 à 22:55:11    

Merci bien, ça m'avance déjà pas mal.

 

Cependant, ce sont bien les appels systèmes que je cherche. C'est dans le cadre d'un cours de programmation système (Système de gestion de fichier, socket TCP/IP, etc... Bon courage, comme tu dis).

 

Je connais à peu près les fonctions stdio, et je pense pouvoir en trouver l'implémentation avec moins de soucis :).

 

Merci !

 

Edit : et connais-tu l'appel système en question ? Que je puisse fureter du côté du noyau ?


Message édité par Somn le 12-01-2012 à 23:02:01
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed