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

 C++ Discussion :

A propos de unistd.h


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 49
    Points : 30
    Points
    30
    Par défaut A propos de unistd.h
    Bonjour,

    je souhaite utiliser la fonction execvp et j'ai lu sur les différents post du forum qu'il faut inclure unistd.h et process.h .

    Est ce que unistd.h est vraiment nécessaire ? Ou bien process.h est suffisant?

    Merci

    Madeline

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    La seule réponse, le man execvp()

    et donc oui, unistd.h est bien nécessaire
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 49
    Points : 30
    Points
    30
    Par défaut
    merci !

    Dans ce cas, est ce que c'est normal que mon programme compile (et qu'il rentre dans la fonction) alors que je n'inclus pas ce fichier ??

  4. #4
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Peut être que le fichier unistd.h est inclus de manière indirecte par un autre fichier que tu inclus. Cela serait un effet de bord.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 49
    Points : 30
    Points
    30
    Par défaut
    D'accord.
    Donc le fait que la commande ne fasse pas ce que je veux ne vient pas de là mais d'une mauvaise utilisation de ma part...

    Merci !!

    Madeline

  6. #6
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    tu peux montrer ton code et dire ce que tu veux faire ?
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 49
    Points : 30
    Points
    30
    Par défaut
    Et bien tout ce que je souhaite en fait, c'est que la console ne s'ouvre pas quand je lance une commande depuis mon cpp. Comme je n'y connais rien, je pensais que cela venait peut être de la fonction que j'utilisais ( system() ).
    Mais apparemment ce n'est pas le cas ! Cela vient du fait que j'utilise un projet Qt console !!

    J'essaie donc maintenant de passer par Qt pour lancer des threads...

    Merci de m'avoir répondu si vite en tout cas.

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 49
    Points : 30
    Points
    30
    Par défaut
    Décidement, j'ai du mal !
    En fait non, j'ai fait une librairie donc l'ouverture de la console doit bien venir de system().
    Est ce que tu sais qu'elle fonction je pourrais utiliser pour que la console ne s'ouvre pas ??

  9. #9
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Il y a des alternatives à system() mais elle sont moins portables.

    CreateProcess() sous Windows par exemple. Là c'est garanti, pas de fenêtre intempestive. Par contre, il faut lancer un executable (.exe), interdit de lacer un .bat.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 49
    Points : 30
    Points
    30
    Par défaut
    J'ai essayé plein de fonctions différentes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    QString l_command = "svn ls --verbose " + p_pathDirectory + " > temp.txt";
    	system( l_command.toAscii().data() );
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    	STARTUPINFO si;
    	PROCESS_INFORMATION pi;
     
    	CreateProcess( NULL,   // No module name (use command line)
    		(LPTSTR)l_command.toAscii().data(),        // Command line
    		NULL,           // Process handle not inheritable
    		NULL,           // Thread handle not inheritable
    		FALSE,          // Set handle inheritance to FALSE
    		0,              // No creation flags
    		NULL,           // Use parent's environment block
    		NULL,           // Use parent's starting directory 
    		&si,            // Pointer to STARTUPINFO structure
    		&pi )  ;         // Pointer to PROCESS_INFORMATION structure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    char *argv[] = { "svn", "ls", "--verbose", p_pathDirectory.toAscii().data(),  ">" , "temp.txt" ,NULL };
    execvp("svn",argv);
    Seule la solution avec system fonctionne ...
    Tu as une idée pourquoi ?
    Remarque : les méthodes toAscii().data() permettent de passer d'un QString à un char*

  11. #11
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Donc visiblement, la commande que tu veux lancer c'est
    svn ls --verbose " <path> > temp.txt
    la redirection "> temp.txt" ne fonctionne pas avec CreateProcess. Les redirections, c'est le shell qui les gère, ce n'est pas un paramètre à passer au programme appelé.

    Un exemple qui fonctionne chez moi :
    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
     
    PROCESS_INFORMATION pi;
    ::memset(&pi, 0, sizeof(pi));
     
    STARTUPINFO si;
    memset(&si, 0, sizeof(si));
    si.cb = sizeof(si);
     
    DWORD creation_flag = CREATE_NO_WINDOW;
    DWORD ret;
    ret = ::CreateProcess(NULL,		// name of executable module
    		command,	// command line string
    		NULL,		// SD
    		NULL,		// SD
    		FALSE,		// handle inheritance option
    		creation_flag,	// creation flags
    		NULL,		// new environment block
    		NULL,		// current directory name
    		&si,		// startup information
    		&pi);		// process information
    if(ret != TRUE)
    {
       // traitement d'erreur
    }
     
     
    ::CloseHandle(pi.hThread);
    Bien relire la doc MSDN au sujet de cette fonction, il y a quelques pièges.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

Discussions similaires

  1. [débutant] unistd.h et windows
    Par Polio dans le forum C
    Réponses: 5
    Dernier message: 05/01/2003, 11h28
  2. A propos depth buffer
    Par j.yves dans le forum DirectX
    Réponses: 1
    Dernier message: 03/12/2002, 00h41
  3. A propos des modèles d'objet (avec sources)
    Par DevX dans le forum C++Builder
    Réponses: 14
    Dernier message: 01/12/2002, 12h22
  4. Fonctionnement de la compression DivX
    Par Rodrigue dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 20/09/2002, 14h10
  5. A propos du composant DBGrid
    Par _Rico_ dans le forum C++Builder
    Réponses: 2
    Dernier message: 24/07/2002, 09h18

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