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 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