Programme serveur d'autorisation (PSR)
DjoTT
-
Utilisateur anonyme -
Utilisateur anonyme -
Bonjour,
Je suis en train de développer un petit programme serveur d'autorisation pour l'accès des trains sur une seule voie dans deux sens (soit de la station A vers la station B et vice versa), le problème c'est que le compilateur ne reconnait pas certaine appels système tels que sem_post, sem_wait, ... voici quelques erreurs générées:
undefined reference to 'sem_wait'
undefined reference to 'sem_post'
undefined reference to 'strcomp'
undefined reference to 'pthread_create'
undefined reference to 'pthread_join'
ci-dessous le programme .C, svp, si quelqu'un peut me le corriger, merci d'avance :)
Je suis en train de développer un petit programme serveur d'autorisation pour l'accès des trains sur une seule voie dans deux sens (soit de la station A vers la station B et vice versa), le problème c'est que le compilateur ne reconnait pas certaine appels système tels que sem_post, sem_wait, ... voici quelques erreurs générées:
undefined reference to 'sem_wait'
undefined reference to 'sem_post'
undefined reference to 'strcomp'
undefined reference to 'pthread_create'
undefined reference to 'pthread_join'
ci-dessous le programme .C, svp, si quelqu'un peut me le corriger, merci d'avance :)
#include <stdio.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <stdlib.h> #include <string.h> #include <pthread.h> #include <semaphore.h> int NbTrainAB=0; int NbTrainBA=0; pthread_mutex_t MutexA,MutexB;//mutex sem_t autorisation;//semaphore autorisation void error(char *msg) { perror(msg); exit(1); } void voyager(){ usleep(15);} void* TrainAB(){ pthread_mutex_lock(&MutexA); if(NbTrainAB=0) {sem_wait(&autorisation);} NbTrainAB++; printf("Vous etes le train numero %d\n",NbTrainAB); pthread_mutex_unlock(&MutexA); voyager(); pthread_mutex_lock(&MutexA); if(NbTrainAB=1) {sem_post(&autorisation);} NbTrainAB--; pthread_mutex_unlock(&MutexA); pthread_exit(NULL); } void* TrainBA(){ pthread_mutex_lock(&MutexB); if(NbTrainBA=0) {sem_wait(&autorisation);} NbTrainBA++; printf("Vous etes le train numero %d\n",NbTrainBA); pthread_mutex_unlock(&MutexB); voyager(); pthread_mutex_lock(&MutexB); if(NbTrainBA=1) {sem_post(&autorisation);} NbTrainBA--; pthread_mutex_unlock(&MutexB); pthread_exit(NULL); } int main(int argc, char *argv[]) { int sockfd, newsockfd, portno, clilen; char buffer[256]; struct sockaddr_in serv_addr, cli_addr; int n; pthread_mutex_init(&MutexA,NULL); pthread_mutex_init(&MutexB,NULL); sem_init(&autorisation,0,1); if (argc != 2) { fprintf(stderr,"Erreur, Manque d'argument\n"); exit(1); } sockfd = socket(AF_INET, SOCK_STREAM, 0); if (sockfd < 0) error("Erreur d'ouverture du socket"); bzero((char *) &serv_addr, sizeof(serv_addr)); portno = atoi(argv[1]); serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = INADDR_ANY; serv_addr.sin_port = htons(portno); if (bind(sockfd, (struct sockaddr *) &serv_addr,sizeof(serv_addr)) < 0) error("Erreur d'association au port"); if(listen(sockfd,5)==-1) error("Erreur dans listen\n"); else { clilen = sizeof(cli_addr); while(1){ newsockfd = accept(sockfd,(struct sockaddr *) &cli_addr,&clilen); if (newsockfd < 0) {error("Erreur d'acceptation");} else{ pthread_t tid; bzero(buffer,256); n = read(newsockfd,buffer,255); if (n < 0) error("Erreur de lecture du socket"); if(strcomp(buffer,"A")==0){ printf("Bon voyage de B vers A\n"); if(pthread_create(&tid,NULL,TrainBA,NULL)==-1) {perror("Thread1");exit(EXIT_FAILURE);}} if(strcomp(buffer,"B")==0){ printf("Bon voyage de A vers B\n"); if(pthread_create(&tid,NULL,TrainAB,NULL)==-1) {perror("Thread2");exit(EXIT_FAILURE);} pthread_join(tid,NULL); } n = write(newsockfd,"Fin de voyage",13); if (n < 0) error("Erreur d'écriture dans le socket"); exit(EXIT_SUCCESS); } } close(newsockfd); } }
A voir également:
- Programme serveur d'autorisation (PSR)
- Changer serveur dns - Guide
- Vous devez disposer d'une autorisation pour effectuer cette action - Guide
- Programme demarrage windows - Guide
- Les paramètres d’autorisation propres à l’application n’accordent pas l’autorisation local activation pour l’application serveur com avec le clsid - Forum Windows
- Localiser un portable gratuitement sans autorisation forum - Forum Téléphones & tablettes Android
2 réponses
Bonjour
Tu obtiens ces erreurs à la compilation proprement dite ou à l'édition de liens ?
Je pencherais plutôt pour l'édition de liens, tu n'as pas dû fournir les bibliothèques.
Tu obtiens ces erreurs à la compilation proprement dite ou à l'édition de liens ?
Je pencherais plutôt pour l'édition de liens, tu n'as pas dû fournir les bibliothèques.
Bonjour
je n'ai pas lu tout le code car il n'est pas indenté et il préférable de le faire en utilisant les balises mises à ta disposition
Avant de te répondre et comme c'est un projet de gestion de train , tu utilise les mutex ou sémaphore voire les deux ? car une des deux suffis de faire ce que tu veux.
quant à ton erreur de compilation il faut linker ton exécutable avec les bonnes bibliothèques
à bientôt
je n'ai pas lu tout le code car il n'est pas indenté et il préférable de le faire en utilisant les balises mises à ta disposition
<code c></code>
Avant de te répondre et comme c'est un projet de gestion de train , tu utilise les mutex ou sémaphore voire les deux ? car une des deux suffis de faire ce que tu veux.
quant à ton erreur de compilation il faut linker ton exécutable avec les bonnes bibliothèques
gcc app.c -Wall -lrt -lpthread -o Gestion
-lrtpour les sémaphore , mémoire partagé
-lpthreadpour les thread
à bientôt