Contenu | Rechercher | Menus

Annonce

Ubuntu-fr.org recrute toujours de nouveaux modérateurs, avec de l'expérience.

Ubuntu 16.04 LTS
Réservez vos DVD et clé USB Ubuntu-fr (premières livraisons mi-mai)

Si vous avez des soucis pour rester connecté, déconnectez vous et reconnectez vous depuis ce lien en cochant le case
Me connecter automatiquement lors de mes prochaines visites.

M.A.J. en cours du forum possibilité de bug, nous faisons le maximum pour les résoudre au plus vite

#1 Le 10/02/2006, à 17: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, à 17:58)

Hors ligne

#2 Le 10/02/2006, à 23: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 11/02/2006, à 00: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