Pages : 1
#1 Le 17/03/2008, à 21:37
- throrin19
[aide]Programmation c sous linux
Bonjours, en cours de système d'exploitation on vient d'apprendre à coder en c avec les primitives de linux et là j'essai donc de refaire ce que l'on a fait en cours et horreur, celà ne marche pas.
Voici le script:
#include <unistd.h>
#include <pwd.h>
#include <grp.h>
#include <stdio.h>
#include <errno.h>
int main(int argc, char * argv[])
{
int util; //utilisateur
struct passwd *p;
struct group *g;
if (argc != 1)
{
fprintf(stderr,"Usage : %s\n",argv[0]);
exit(3);
}
util = getuid();
p = getpwuid(util);
if (p == NULL)
{
perror("Erreur UID");
exit(1);
}
g = getgrgid(p.pw_gid);
if (g == NULL)
{
perror("Erreur GID");
exit(2);
}
printf("UID=%d (%s) GID=%d (%s)\n", uid, p.pw_name, p.pw_gid, g.gr_name);
exit(0);
}
Pour info ce script refait exactement la même chose que la commande id de linux.
Et voici ce que me sort le compilateur gcc:
id2.c: In function «main":
id2.c:16: attention : incompatible implicit declaration of built-in function «exit"
id2.c:23: attention : incompatible implicit declaration of built-in function «exit"
id2.c:25: erreur: request for member «pw_gid" in something not a structure or union
id2.c:29: attention : incompatible implicit declaration of built-in function «exit"
id2.c:31: erreur: «uid" undeclared (first use in this function)
id2.c:31: erreur: (Each undeclared identifier is reported only once
id2.c:31: erreur: for each function it appears in.)
id2.c:31: erreur: request for member «pw_name" in something not a structure or union
id2.c:31: erreur: request for member «pw_gid" in something not a structure or union
id2.c:31: erreur: request for member «gr_name" in something not a structure or union
id2.c:32: attention : incompatible implicit declaration of built-in function «exit"
id2.c:33:2: attention : pas de retour chariot à la fin du fichier
Je ne sais pas d'où celà vient, j'ai la documentation de toutes les fonctions de base: exit(), perror, ... et je ne vois pas. Merci d'avance
Hors ligne
#2 Le 17/03/2008, à 21:55
- jpages
Re : [aide]Programmation c sous linux
Pour résoudre le warning sur la fonction "exit", il faut rajouter au début du code la ligne :
#include <stdlib.h>
(D'après la doc de la fonction exit())
Ensuite, pour les variables comme "pw_gid", "pw_name" et "gr_name", c'est une erreur de syntaxe sur les
pointeurs. Il faut par exemple remplacer
p.pw_name
par :
p->pw_name
Enfin, la variable uid n'est déclarée nulle part dans la fonction, c'est peut-être "util" à la place.
"Notre liberté se bâtit sur ce qu'autrui ignore de nos existences." (Alexandre Soljénitsyne)
Hors ligne
#3 Le 17/03/2008, à 22:04
- throrin19
Re : [aide]Programmation c sous linux
merci effectivement sa marche mais j'ai une erreur au lancement du programme:
id2: 1: Syntax error: "(" unexpected
En fait j'ai trouvé, il faut que je fasse ./id2 et non sh id2
Dernière modification par throrin19 (Le 17/03/2008, à 22:06)
Hors ligne