Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 13/10/2015, à 11:52

DonutMan75

[RESOLU] [C] Descripteur de fichier vs Pointeur sur fichier

Bonjour à tous,
j'aimerais connaître vos avis concernant ces deux façons différentes d'accéder aux fichiers en C

Première méthode : via un pointeur sur fichier
Bibliothèque nécessaire : standard (<stdlib.h>)
Syntaxe :

FILE *fin = fopen("toto.txt", "r+"); // Ouvrir le fichier
char c = getc(fin); // Lire un caractère
putc('A', fin); // Ecrire un caractère
fclose(fin); // Fermer le fichier

Seconde méthode : via un descripteur de fichier
Bibliothèque nécessaire : aucune (?) ou à la rigueur <fcntl.h> pour la définition des constantes de flags comme O_RDWR
Syntaxe :

char *tamp = (char *) malloc(sizeof(char));
int pin = open("toto.txt", O_RDWR); // Ouvrir le fichier
int nin = read(pin, tamp, 1); // Lire un caractère (1 octet)
int nout = write(pin, tamp, 1); // Ecrire un caractère (1 octet)
close(pin); // Fermer le fichier
free(tamp);

Différences :
- la méthode via un descripteur de fichier (read, write) est plus BAS NIVEAU que getc et putc (mais au fond, qu'est ce que ça veut dire ?)
- la méthode via un descripteur de fichier (read, write) peut lire des octets qui ne sont pas des chaînes de caractère (???) donc on peut s'en servir par exemple pour copier des fichiers binaires (chose qui serait impossible avec getc et putc ????)
- autres différences ?

Donc au final, si je travaille avec de l'ASCII mieux vaut utiliser les pointeurs de fichiers. Si je travaille avec du binaire, mieux vaut utiliser les descripteurs de fichiers ?

Merci d'avance pour vos lumières smile

D.

Dernière modification par DonutMan75 (Le 13/10/2015, à 17:01)

Hors ligne

#2 Le 13/10/2015, à 13:25

grim7reaper

Re : [RESOLU] [C] Descripteur de fichier vs Pointeur sur fichier

Salut,

DonutMan75 a écrit :

Bibliothèque nécessaire : aucune (?) ou à la rigueur <fcntl.h> pour la définition des constantes de flags comme O_RDWR

Il me semble qu'il faut au moins inclure <unistd.h>

DonutMan75 a écrit :

la méthode via un descripteur de fichier (read, write) est plus BAS NIVEAU que getc et putc (mais au fond, qu'est ce que ça veut dire ?)

La plus grosse différence à mes yeux c'est que read/write c'est du POSIX (donc pas forcément disponible partout, Windows par exemple…) alors que l'API FILE c'est du C standard (donc disponible partout à priori).

DonutMan75 a écrit :

la méthode via un descripteur de fichier (read, write) peut lire des octets qui ne sont pas des chaînes de caractère (???)

Je ne comprends pas trop ce que tu veux dire, mais il est tout à fait possible de faire des I/O en mode binaire avec un FILE (cf. fread/fwrite).

DonutMan75 a écrit :

Donc au final, si je travaille avec de l'ASCII mieux vaut utiliser les pointeurs de fichiers. Si je travaille avec du binaire, mieux vaut utiliser les descripteurs de fichiers ?

Au final je dirais que par défaut tu dois partir pour du l'API FILE (c'est standard, plus haut niveau, …) et si ça ne va pas (et quand tu seras dans ce cas, tu le sauras sinon c'est  que FILE convient) alors passe par les descripteurs de fichiers.

Hors ligne

#3 Le 13/10/2015, à 17:05

DonutMan75

Re : [RESOLU] [C] Descripteur de fichier vs Pointeur sur fichier

Bonjour grim7reaper,
merci pour ta réponse, les choses sont un peu plus claires maintenant smile

P.S : je suis allé voir ton blog du coup, c'est très intéressant (surtout les articles crackme). D'ailleurs je me suis posé une question : comment définirais-tu un mot de passe dans un code en C pour qu'il ne soit pas visible par strings ./monprogramme ?

Bonne soirée et à bientôt,

D.

Hors ligne

#4 Le 13/10/2015, à 23:28

grim7reaper

Re : [RESOLU] [C] Descripteur de fichier vs Pointeur sur fichier

DonutMan75 a écrit :

P.S : je suis allé voir ton blog du coup, c'est très intéressant (surtout les articles crackme).

Merci smile
Content que ça te plaise (d’autant plus que les articles sur les crackme ont failli disparaître (j’ai eu des demandes de retrait), mais je les ai conservés ce qui a eu pour conséquence de me faire bannir de root-me en tant que tricheur… (le ban je le mérite, je n'ai pas respecté leur conditions d’utilisations, mais l’étiquette de tricheur…))

DonutMan75 a écrit :

D'ailleurs je me suis posé une question : comment définirais-tu un mot de passe dans un code en C pour qu'il ne soit pas visible par strings ./monprogramme ?

C’est une question dont la réponse correcte ne risque pas de tenir en un message, mais disons que tu peux avoir deux approches:
- ne pas stocker le mot de passe dans le programme (le lire depuis un fichier par exemple).
- ne pas utiliser le mot de passe en clair (utiliser un hash du mot de passe par exemple).

Hors ligne

#5 Le 14/10/2015, à 14:16

grigouille

Re : [RESOLU] [C] Descripteur de fichier vs Pointeur sur fichier

Ne pas oublier de saler le mot de passe.


Debian (xfce) 12
HP LaserJet M1132 MFP

Hors ligne