S'améliorer en C

[Fais suite au thread: programmation-de-debian-t32591.html]

Tiens je vois que ça parle de C, ça m’intéresse !

J’aimerais améliorer mon niveau en C (qui se limite aux bases) mais je ne sais pas trop par où commencer (haha): j’ai dl les sources de coreutils mais rien qu’à la vue des différents codes sources j’me sens un peu paumé… (pas l’habitude des codes aussi longs et je ne dois pas saisir toutes les subtilités)

Si quelqu’un a un conseil / un bon lien, je suis preneur !

Merci d’avance,
Louis.

Ca dépends de ce que tu cherche à faire, mais si tu veut tu peut reproduire les commandes coreutils toi même (tu peut te limiter à POSIX c’est plus simple) et comme lecture le seul livre sur le C que j’ai lu c’est “programmation en C sous linux”…

Je ne souhaite pas spécifiquement reproduire les commandes coreutils. Seulement pour commencer les “choses sérieuses” en C ça me paraissait un bon point de départ… Mais je trouve ça déjà un peu galère :blush:

Merci pour la référence du livre, j’essaye de trouver ça !

Je suis une bille en C, et pourtant j’arrive à comprendre à peu près comment fonctionnent les codes écrits chez suckless.org . Ils restent assez simple et plutot clair. Mais bon, ce ne serait qu’une étape avant les choses hyper sérieuses

Salut,

C’est normal de se sentir dérouter en lisant le code source des différents commandes de coreutils, ces derniers sont loin d’être simple. D’ailleurs, je trouve que la pluspart des sources du projet GNU sont assez difficile à lire et à comprendre. En règles générale je trouve les sources des BSD plus “pédagogique” et plus simple (ce n’est que mon avis).

Sinon, comme l’a dit MisterFreez cela dépend de ce que tu veux faire et aussi où tu en est au niveau du langage C. Tu as déjà lu des livres sur le sujet comme le K&R (Le langage C Norme ANSI) par exemple?

Bonsoir et merci pour vos réponses.

Thuban: merci pour le lien, ça m’a l’air bien sympa comme site !

Taurre: Je n’ai pas beaucoup utilisé la littérature existante, je dois bien l’avouer. Je vais essayer de me procurer ces ouvrages mais également les sources BSD.

Globalement j’ai compris les concepts << de base >> du C mais je n’ai que trop peu pratiqué. Un peu de lecture de code va sans doute me (re)motiver pour m’y mettre :wink:

Merci encore à vous,
Louis.

Voici un lien vers un cours sur le langage C.

Mon conseil : c’est en forgeant que l’on devient forgeron. Choisis une idée de programme et mène là jusqu’au bout.

Je te conseille de faire un programme de tri d’entiers. Ce programme prend en entrée deux noms de fichiers. Dans le premier fichier, il y a un nombre sur chaque ligne. Le programme doit trier les entiers par ordre croissant et stocker le résultat dans un fichier (le nom de ce fichier est le deuxième argument passé au programme).

Exemple d’utilisation :

[code]$ cat entree.txt
7
3
5
9
1

$ ./prog_tri entree.txt sortie.txt
$ cat sortie.txt
1
3
5
7
9

[/code]

+10

Du côté de FreeBSD, tu peux trouver les sources ici. Après, il suffit de suivre l’arborescence (src/bin pour un programme par exemple) :wink:

En parleant de forger pour être forgeron, il y a un site super sympa :
pythonchallenge.com/
Alors, c’est à la base pour le python, mais le principe peut être fait avec n’importe quel langage!

En gros, tu arrives sur une page avec une énigme, tu dois la résoudre en utilisant la programmation. La réponse te donne l’adresse de la page web suivante.
Tu peux par la suite aller observer les corrigés, tu trouveras tout un tas d’autres manières de faire ce que tu viens de faire. C’est très enrichissant.
Il existe peut-être d’autres sites du genre?

Bonjour à tous,
Il n’est plus grande vérité que celle qui consiste à dire que c’est en forgeant que l’on devient forgeron ! C’est pourquoi, si tu maîtrises les bases du langage, il faut se lancer dans un projet !

Il y a bien une commande ou une petite application qui te manque. Ou, s’il elle existe, elle ne te convient pas parfaitement. Lance-toi dans le codage de celle-ci et je peux t’assurer que tu progresseras !

Avec un peu de courage, les sites de documentations officielles, les forums et tutoriels devraient te mener à ce (double) but.

Bon courage.

Salut,

Ou alors tu analyse du code existant, par exemple j’ai découvert récemment le code du soft ssmtp, il y a de tout dans quelques fichiers.

il y a même un longjmp:

[code]void handler(void)
{
extern jmp_buf TimeoutJmpBuf;

longjmp(TimeoutJmpBuf, (int)1);

}[/code]
:017 :laughing:

Pour analyser c’est bien d’utiliser des TAGs… :think:, il faut alors trouver l’éditeur qui TAG bien… :mrgreen:

[quote=“thuban”]En parleant de forger pour être forgeron, il y a un site super sympa :
pythonchallenge.com/
Alors, c’est à la base pour le python, mais le principe peut être fait avec n’importe quel langage!

En gros, tu arrives sur une page avec une énigme, tu dois la résoudre en utilisant la programmation. La réponse te donne l’adresse de la page web suivante.
Tu peux par la suite aller observer les corrigés, tu trouveras tout un tas d’autres manières de faire ce que tu viens de faire. C’est très enrichissant.
Il existe peut-être d’autres sites du genre?[/quote]

Je trouve ça intriguant de résoudre ces énigmes avec python à partir d’un site web…la piste est dans le code source des pages??

Je pense à un ou deux bons bouquins du style :