1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
| #include "cs.h"
/***************************************************
********************CLIENT.C***********************
**************************************************/
int main (int argc, char* arg[]) {
struct Request req;
int fd,fdc;
int n;
//On recupere le pid pour en faire le nom du tube de retour
sprintf(req.pidRequete, "tube%d", getpid());
//Creation du tube de retour
if(mkfifo(req.pidRequete, S_IRUSR | S_IWUSR) == -1 ) {
perror("mkfifo");
exit(EXIT_FAILURE);
}
//Ouverture du tube du serveur en ecriture
if ((fd = open(TUBER, O_WRONLY)) == -1){
perror("openClient");
exit(EXIT_FAILURE);
}
/****************Envoi de la requete***********************/
req.type_request = 1;
printf("%u\n",getuid());
req.infoProc.uidUsr = getuid();
if (write(fd, &req, sizeof(req)) == -1) {
perror("write");
exit(EXIT_FAILURE);
}
/****************Fin de l envoi****************************/
//Ouverture du tube de reponse en lecture et attente de la reponse
if ((fdc = open(req.pidRequete, O_RDONLY)) == -1 ) {
perror("open");
exit(EXIT_FAILURE);
}
//lecture de la reponse
union Answer reqback;
if((n=read(fdc ,&reqback, sizeof(reqback))) == -1){
perror("read");
exit(EXIT_FAILURE);
}
//traitement de la reponse
if (reqback.usrInfo.uidInfo != NULL || reqback.usrInfo.grpInfo != NULL) {
fprintf(stdout,"Login : %s | Nom réel : %s | rep : %s | shell : %s\n",reqback.usrInfo.uidInfo->pw_gecos,reqback.usrInfo.uidInfo->pw_name,reqback.usrInfo.uidInfo->pw_dir,reqback.usrInfo.uidInfo->pw_shell);
printf("Grp NAme : %s\n",reqback.usrInfo.grpInfo->gr_name);
}
//fermeture des descripteurs
if(close(fd) == -1) {
perror("close");
exit(EXIT_FAILURE);
}
if(close(fdc) == -1) {
perror("close");
exit(EXIT_FAILURE);
}
//femeture du tube de retour
if(unlink(req.pidRequete) == -1) {
perror("unlink");
exit(EXIT_FAILURE);
}
exit(EXIT_SUCCESS);
} |
Partager