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
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
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.
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 ??
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.
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
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.
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.
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 ??
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.
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 structureSeule la solution avec system fonctionne ...
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);
Tu as une idée pourquoi ?
Remarque : les méthodes toAscii().data() permettent de passer d'un QString à un char*
Donc visiblement, la commande que tu veux lancer c'est
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é.svn ls --verbose " <path> > temp.txt
Un exemple qui fonctionne chez moi :
Bien relire la doc MSDN au sujet de cette fonction, il y a quelques pièges.
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);
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.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager