Contenu | Rechercher | Menus

Annonce

Si vous rencontrez des soucis à rester connecté sur le forum (ou si vous avez perdu votre mot de passe) déconnectez-vous et reconnectez-vous depuis cette page, en cochant la case "Me connecter automatiquement lors de mes prochaines visites".
Test de l'ISO d'Ubuntu francophone : nous avons besoin de testeurs pour la version francophone d'Ubuntu 14.04. Liens et informations ici.

Attention, une faille de sécurité dans bash a récemment été rapportée, il est recommandé de mettre à jour son système (plus de détails) *** mise à jour 12/10/2014 ***

#1 Le 10/02/2006, à 16:51

Xtatic

Un coup de main sur un petit programme ?

Bonjour,
J'ai testé un programme utilisant des threads sur mon portable mais je n'obtiens pas le résultats escompté. Si quelqu'un sous Ubuntu voudrait bien le compiler et l'essayter,  je lui en serait trés reconnaissant wink

Voila mon programme (qui fonctionne sous KDE) :

#include<stdio.h>
#include<pthread.h>
#include <semaphore.h>
#include<unistd.h>

#define MAX 100

sem_t mutex, vide, plein;
char tampon[MAX];
pthread_t tid[2];

void* proc(void* i);

int main()
{
	int i;
	
	sem_init(&mutex, 0, 1);
	sem_init(&vide, 0, MAX);
	sem_init(&plein, 0, 0);
	
	for(i = 0; i<2; i++)
		pthread_create(tid + i , NULL , (void*(*)())proc, (void *)i);
	pthread_join(tid[0], (void *)i);
	pthread_join(tid[1], (void *)i);
	return 0;
}
	
void* proc(void* i)
{
	int rep;
	int posLecteur, posEcrivain;
	posLecteur = 0;
	posEcrivain = 0;
	
	if(i==0) { // Lecteur
		do{
			sem_wait(&plein);
			sem_wait(&mutex);
			rep = write(STDOUT_FILENO, &tampon[posLecteur], 1);
			posLecteur = (posLecteur + 1) % MAX;
			sem_post(&mutex);
			sem_post(&vide);
			
		}while(rep != 0);
		
	}else{ //Ecrivain
		do{
			sem_wait(&vide);
			sem_wait(&mutex);
			rep = read(STDIN_FILENO, &tampon[posEcrivain], 1);
			posEcrivain = (posEcrivain + 1) % MAX;
			sem_post(&mutex);
			sem_post(&plein);
			
		}while(rep!=0);
		
	}
	
	return NULL;
}

Normalement , une fois executé, lorsqu'on tape des caractères, ceux ci doivent etre réenvoyé à l'écran.
Mais lorsque je le compile sur mon portable (sous ubuntu) rien n'est renvoyé.

Pour compiler, je tape : gcc -lpthread -o executable le_nom_du_fichier_source.c

et avec un -Wall, je n'obtiens aucun warnings.

Je crains que le paquets build essential et ses dépendances que j'ai téléchargés ne sont pas entièrements bon (j'ai telechargé des paquets pour une distrib debian, et non spécifiquement ubuntu) .

Merci de l'aide que vous pourrez m'apporter.

Dernière modification par Xtatic (Le 10/02/2006, à 16:58)

Hors ligne

#2 Le 10/02/2006, à 22:44

Sacre

Re : Un coup de main sur un petit programme ?

Je l'ai compilé sur ma Ubuntu (avec les build-essential d'Ubuntu et gcc 4)

Quand je tappe des caractères, ils sont effectivement affiché dans ma console. Donc ton programme à l'air de fonctionner smile

Hors ligne

#3 Le 10/02/2006, à 23:35

Xtatic

Re : Un coup de main sur un petit programme ?

Merci.
Bon, et bien je vais recommencer les telechargements des paquets wink
Je verrai bien ce qui se passera hmm

Hors ligne

Haut de page ↑