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

Linux Discussion :

[c++ Unix] Diverses questions


Sujet :

Linux

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 634
    Points : 407
    Points
    407
    Par défaut [c++ Unix] Diverses questions
    Bonsoir a tous,
    je fait un programme portable avec les api natives de chaque systeme (Windows et UNIX) et j'ai quelque souci pour trouver les équivalents de certaine fonctions.

    - Comment connaitre le nom, taille occupée, taille total des différents volumes (tout ce qui est visible avec la commande "df" en fait.
    - Comment lire un fichier son (.mp3, .wav) sans utiliser de lib externe (genre FMOD ou autre).
    - Comment ouvrir un lecteur CD / le fermer (équivalent de mscisendstring de Windows)
    - Comment redémarrer le pc (j'ai essayer de faire un exec de "reboot") mais ca ne passe visiblement pas !
    - Est-il possible de faire des hooks clavier et/ou souris comme sous windows ? Si oui comment ?

    Je vous remercie d'avance

    Cordialement,
    NeoKript

  2. #2
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    Hélas, aucune de ces questions n'as de réponse assurément portable sous UNIX puisque UNIX se base sur la norme POSIX, et que celle ci ne définie aucune de ces fonctions. Tu vas être obligé de te tourner vers des fonctions spécifiques pour chaque UNIX que tu supporteras.
    Cordialement.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 165
    Points : 56
    Points
    56
    Par défaut
    Tu parles de POSIX. Le c++ Windows n'est pas base sur cette norme ?
    Est ce pour cela que toutes les fonctions disponibles sur UNIX ne sont pas disponible sur Windows ?
    Sur quelle norme sont alors places les fonctions telle que read ... ?

  4. #4
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    Citation Envoyé par toams69 Voir le message
    Tu parles de POSIX. Le c++ Windows n'est pas base sur cette norme ?
    cela n'a rien à voir avec le C++, Windows ne suit que le C89 comme norme, en dehors de ça, il offre l'api WIN32 qui lui est spécifique ainsi que l'api native qui l'est aussi.

    Citation Envoyé par toams69 Voir le message
    Est ce pour cela que toutes les fonctions disponibles sur UNIX ne sont pas disponible sur Windows ?
    Absolument, il existe bien des implémentations de POSIX sous Windows mais sous forme de bibliothèque tiers et souvent incomplète (cf cygwin).

    Citation Envoyé par toams69 Voir le message
    Sur quelle norme sont alors places les fonctions telle que read ... ?
    read() fait partie de la norme POSIX et accessoirement, je crois qu'elle existe aussi dans l'api WIN32.

    Cordialement.

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 634
    Points : 407
    Points
    407
    Par défaut
    Merci pour vos réponses,
    Nicolas aurais-tu des liens ou des indications concernant ce que je cherche a faire (notamment sous Ubuntu, FreeBSD).

    Merci d'avance

    Ps : Pour les informations sur les volumes il n'y a pas un répertoire spécifique comme pour les processus (\proc) avec le listing des volume et leur infos ?

  6. #6
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    Citation Envoyé par NeoKript Voir le message
    Ps : Pour les informations sur les volumes il n'y a pas un répertoire spécifique comme pour les processus (\proc) avec le listing des volume et leur infos ?
    Surement, mais rien de portable ni de standard, je peux seulement t'aider pour linux, si ça t'intéresse.

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 634
    Points : 407
    Points
    407
    Par défaut
    Oui cela m'intéresse,
    je m'arrangerai par la suite pour porter sur les autres systeme.

    Merci bien

  8. #8
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    Ok, je finis de déguster cet infâme repas et je te répond ensuite.

  9. #9
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 634
    Points : 407
    Points
    407
    Par défaut
    Pas de soucis, prends ton temps.

    Bonne appétit !

  10. #10
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    Sous Linux:
    Citation Envoyé par NeoKript Voir le message
    - Comment connaitre le nom, taille occupée, taille total des différents volumes (tout ce qui est visible avec la commande "df" en fait.
    voir les fonctions suivantes:
    getmntent, setmntent, addmntent, endmntent, hasmntopt, getmntent_r couplées à statfs, fstatfs.

    Citation Envoyé par NeoKript Voir le message
    - Comment lire un fichier son (.mp3, .wav) sans utiliser de lib externe (genre FMOD ou autre).
    C'est la galère, c'est bien pour cela qu'il y a des bibliothèques, tu dois décoder le mp3 à la main (te farcir la spécification) et envoyer le son à la carte réseau.

    Citation Envoyé par NeoKript Voir le message
    - Comment ouvrir un lecteur CD / le fermer (équivalent de mscisendstring de Windows)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    drive = open("/dev/cdrom", O_RDONLY | O_NONBLOCK);
    ensuite, un appel à ioctl() avec en argument, un des paramètre pour le lecteur CD que l'on retrouve dans cette liste et notamment
    // <include/linux/cdrom.h>

    0x00005301 CDROMPAUSE void
    0x00005302 CDROMRESUME void
    0x00005303 CDROMPLAYMSF const struct cdrom_msf *
    0x00005304 CDROMPLAYTRKIND const struct cdrom_ti *
    0x00005305 CDROMREADTOCHDR struct cdrom_tochdr *
    0x00005306 CDROMREADTOCENTRY struct cdrom_tocentry * // I-O
    0x00005307 CDROMSTOP void
    0x00005308 CDROMSTART void
    0x00005309 CDROMEJECT void
    0x0000530A CDROMVOLCTRL const struct cdrom_volctrl *
    0x0000530B CDROMSUBCHNL struct cdrom_subchnl * // I-O
    0x0000530C CDROMREADMODE2 const struct cdrom_msf * // MORE
    0x0000530D CDROMREADMODE1 const struct cdrom_msf * // MORE
    0x0000530E CDROMREADAUDIO const struct cdrom_read_audio * // MORE
    0x0000530F CDROMEJECT_SW int
    0x00005310 CDROMMULTISESSION struct cdrom_multisession * // I-O
    0x00005311 CDROM_GET_UPC struct { char [8]; } *
    0x00005312 CDROMRESET void
    0x00005313 CDROMVOLREAD struct cdrom_volctrl *
    0x00005314 CDROMREADRAW const struct cdrom_msf * // MORE
    0x00005315 CDROMREADCOOKED const struct cdrom_msf * // MORE
    0x00005316 CDROMSEEK const struct cdrom_msf *
    Citation Envoyé par NeoKript Voir le message
    - Comment redémarrer le pc (j'ai essayer de faire un exec de "reboot") mais ca ne passe visiblement pas !
    La fonction reboot().
    Citation Envoyé par NeoKript Voir le message
    - Est-il possible de faire des hooks clavier et/ou souris comme sous windows ? Si oui comment ?
    ça se fait au niveau xlib, peut être même GDK/QT (mais je n'en suis pas sûr), je t'invite à consulter la recherche sur le forum, la question a déjà été posé.

    Cordialement.

  11. #11
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 634
    Points : 407
    Points
    407
    Par défaut
    Rien a redire !

    Merci beaucoup,
    Je te fais signe en cas de problème !

  12. #12
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    Citation Envoyé par NeoKript Voir le message
    Rien a redire !

    Merci beaucoup,
    You're welcome!

    Citation Envoyé par NeoKript Voir le message
    Je te fais signe en cas de problème !
    Pense au tag "Résolu" quand ça le sera.

    Cordialement.

  13. #13
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 634
    Points : 407
    Points
    407
    Par défaut
    J'ai deux-trois petites questions si tu as 5min.

    - pour le reboot.... il faut obligatoirement lancer le programme en root ? (sinon aucun effet, c'est un peu dommage).
    - pour les lecteurs, s'il y a plusieurs lecteur cd comment faire ? j'ai vu que /dev/cdrom était un lien symbolique pointant sur scd0, pour ouvrir tout les lecteur, il faut donc ouvrir tout les scdX ... ? De plus j'ai bien trouver l'ouverture "CDROMEJECT" mais pour la fermeture... je ne trouve pas de close .. est-ce CDROMRESET, je ne peux pas tester (je suis sur un pc portable, le lecteur ne rentre pas automatiquement).

    Merci d'avance !

  14. #14
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    Citation Envoyé par NeoKript Voir le message
    - pour le reboot.... il faut obligatoirement lancer le programme en root ? (sinon aucun effet, c'est un peu dommage).
    Non, il ne faut pas être root, il faut avoir la capacité CAP_SYS_BOOT que par défaut seul root possède. Un petit tour sur la documentation des capacités te donnera la marche à suivre.

    Citation Envoyé par NeoKript Voir le message
    - pour les lecteurs, s'il y a plusieurs lecteur cd comment faire ? j'ai vu que /dev/cdrom était un lien symbolique pointant sur scd0, pour ouvrir tout les lecteur, il faut donc ouvrir tout les scdX ... ?
    Généralement, les cdroms sont identifiés (on se fiche de savoir si ce sont des liens symboliques) comme ceci:
    -/dev/cdrom
    -/dev/cdrom1
    -/dev/cdrom2
    ...

    Citation Envoyé par NeoKript Voir le message
    De plus j'ai bien trouver l'ouverture "CDROMEJECT" mais pour la fermeture... je ne trouve pas de close .. est-ce CDROMRESET, je ne peux pas tester (je suis sur un pc portable, le lecteur ne rentre pas automatiquement).
    voir CDROMCLOSETRAY.

    Cordialement.

  15. #15
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 634
    Points : 407
    Points
    407
    Par défaut
    Merci bien, je regarderai ca demain.

    Bonne nuit

  16. #16
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 634
    Points : 407
    Points
    407
    Par défaut
    Salut,

    J'ai regarde les capacités mais je ne trouve pas les fonctions capset et capsetp... Dans le man, ils disent d'inclure <sys/capability.h> mais ce fichier n'existe pas il existe seulement <linux/capability.h> les defines telle que CAP_SYS_BOOT sont bien defini dedans mais aucun prototypes de capset ou cpsetp ... (je suis sur la dernière version de Ubuntu)

    Merci d'avance
    Cordialement,
    NeoKript

  17. #17
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    Le syscall est présent mais tu n'as pas la bibliothèque:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sudo apt-get install libcap-dev

  18. #18
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 165
    Points : 56
    Points
    56
    Par défaut
    Bonjour,
    Je suis egalement interesse par le reboot de la machine a partir dun code C, mais j'ai une erreur de segmantation lorsque j'essaie d'acquerir la capacite CAP_SYS_BOOT.
    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if (cap_set_proc(cap_t(CAP_SYS_BOOT)) == -1)
    std::cout << "Error" << std::endl;
    Ca n'affiche pas error mais "Erreur de segmentation"

    Merci d'avance

  19. #19
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 634
    Points : 407
    Points
    407
    Par défaut
    Salut,
    moi aussi je suis en train de regarder du coté de cap_set_proc (vu que même en installant libcap (dev1 et dev2) capsetp ne semble pas être définie).

    cap_t est une structure que l'ont peut remplir ac la define cap_t que tu as utilise mais j'ai également une erreur de segmentation.

    Nicolas pourrais-tu m'orienter sur l'utilisation de cap_set_proc stp car le man n'est pas tres explicite (peu d'infos sur le type cap_t notamment => obliger de regarder dans le .h mais je n'ai pas du comprendre l'utilisation..)

    Cordialement,
    NeoKript

  20. #20
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    voir l'exemple du programme ping : http://www.ibm.com/developerworks/li...-posixcap.html.
    Cordialement.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [Inno setup/IsTool]Diverses questions
    Par marsup54 dans le forum Installation, Déploiement et Sécurité
    Réponses: 14
    Dernier message: 18/07/2006, 11h11
  2. [HTML] Diverses questions sur le HTML
    Par Ekin0X dans le forum Balisage (X)HTML et validation W3C
    Réponses: 15
    Dernier message: 29/06/2006, 11h46
  3. Réponses: 18
    Dernier message: 04/04/2006, 15h31
  4. C++ diverses questions concernant directX
    Par TERRIBLE dans le forum DirectX
    Réponses: 5
    Dernier message: 06/10/2005, 00h09
  5. Diverse question ...
    Par Dims dans le forum Développement
    Réponses: 11
    Dernier message: 13/01/2004, 16h29

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