IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Administration système Discussion :

Commande 'beep' en job appelé depuis un programme en C


Sujet :

Administration système

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    347
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 347
    Par défaut Commande 'beep' en job appelé depuis un programme en C
    Bonjour,

    j'ai un petit problème avec la commande 'beep', elle sonne bizarrement.
    J'ai une commande qui fonctionne parfaitement en console, mais lorsque je l'intègre à mon programme C, parfois, ça sonne bien, parfois ça sonne faux, une note ce rajoute ou change complètement de fréquence sans savoir pourquoi.

    voici ma commande:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    beep -D 300 -f 1000 -l 500 -r 4 -n -f 2000 -l 500
    j'utilise un sprintf pour y rajouter une esperluette (&) de manière à en faire un job pour ne pas bloquer mon programme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sprinf(command, "%s &", myConf->beep);
    system(command);
    J'ai bien sur tracé le contenu de command mais elle contient bien:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    beep -D 300 -f 1000 -l 500 -r 4 -n -f 2000 -l 500 &
    Et comme je vous le dit, parfois, la première fois, ça fonctionne bien, mais pas les autres. De plus, mon programme ne fait absolument rien de spécial durant cette période, rien de gourmand en ressource.

    des idées? je suis preneur.

    Je suis sous Ubuntu Server v10.1

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    347
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 347
    Par défaut
    Juste pour information,

    j'ai effectué des testes avec execl() et execpv(), de changer la priorité avec renice, mais rien, ça ne change rien.

    J'ai bien entendu changer ma commande pour la décomposer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    beep -D 300 -f 1000 -l 500 -n -D 300 -f 1000 -l 500 -n -D 300 -f 1000 -l 500 -n -D 300 -f 1000 -l 500 -n -f 2000 -l 500
    Mais toujours pareil...

    Toute aide est la bienvenu

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    347
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 347
    Par défaut
    J'ai ré-effectué d'autres testes,

    j'ai réécrit un programme beep simple, qui utilise les escapes \e[10] et \e[11] plutôt que par ioctl()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
     
    int main(int argc, char *argv[])
    {
    	int   frequence = 0;
    	int   length    = 0;
     
    	if (argc > 2)
    	{
    		frequence = atoi(argv[1]);
    		length    = atoi(argv[2]);
     
    		fprintf(stdout, "\e[10;%d]\e[11;%d]\a\e[10]\e[11]", frequence, length);
    		fflush(stdout);
     
    		if (length > 0)
    		{
    			usleep(length * 1000L);
    		}
    		exit(1);
    	}
    	else
    	{
    		fprintf(stderr, "missing arguments\r\n");
    		exit(0);
    	}
    }
    J'ai exactement le même problème, ça fonctionne bien la première fois, puis ensuite, durant la première pause, le bip n'est pas celui demandé, plus grave, prolongé? bref...

    J'ai l'impression qu'il y a comme une fenêtre durant laquelle, peu être, le système utilise trop de ressource pour effectué un bip correctement.

    Pour résoudre mon problème, j'ai changer mes délais, les pauses sont plus longues (et donc "la fenêtre bloquante" est durant la première pause), plus de problèmes
    Je suis repassé sous la commande beep classique.

    Sinon, quelqu'un saurait de quel manière une carte mère gère le speaker intégré?

  4. #4
    Membre actif
    Avatar de debianhunter
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 63
    Par défaut
    Citation Envoyé par dtcSearch Voir le message
    Sinon, quelqu'un saurait de quel manière une carte mère gère le speaker intégré?
    Ca doit dependre de la distribution. Sous Debian, c'est gere avec le module kernel qui s'appelle pcspkr.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    347
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 347
    Par défaut
    Ubuntu doit être pareil,
    d'ailleurs quelques manipulations sont à faire pour le faire fonctionner le speaker, donc le retrait de la (/etc/modprobe.d/)blacklist de ce module "pcspkr"

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Appeler Maven depuis un programme java
    Par webtech dans le forum Maven
    Réponses: 1
    Dernier message: 14/08/2007, 10h10
  2. Réponses: 20
    Dernier message: 08/09/2006, 10h55
  3. Réponses: 4
    Dernier message: 01/06/2006, 15h55
  4. Réponses: 4
    Dernier message: 01/05/2006, 14h37
  5. Problème sur la commande COPY depuis un programme Java
    Par klereth dans le forum PostgreSQL
    Réponses: 10
    Dernier message: 10/02/2006, 14h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo