begin process at 2012 05 29 22:28:05
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Linux

 > 

Autre

 > 

Probleme C / systeme LINUX


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Probleme C / systeme LINUX

jeudi 5 mai 2011 à 14:30:32 | Probleme C / systeme LINUX

elite182

Bonjour a tous !!

Je rencontre actuellement un probleme sur le C.

Comme vous me l'avez explique la derniere fois en cours, j'ai obtenu un pointeur de pointeur de caractere , me permettant de stocker dans un tableau chaque argument de la ligne de commande taper par l'utilisateur de mon "mini_shell".

Je souhaitrais realiser une fonction qui me renvoit toujours un pointeur de pointeur de caractere pour pouvoir " redecouper " la ligne de commande saisie.

ex : ps -L | wc -L

je souhaiterai que ma fonction me renvoi simplement par exemple : ps -L

Pour cela , j'ai utiliser realloc, mais d'apres les sources d'internet , il est source de nombreux probleme.

Ma fonction ne plante pas a la compilation , mais lors de l'execution celle-ci renvoi une erreur incomprehensible...

Je voudrais savoir ce que vous me conseillez pour la realisation de cette fonction.

Voici ma fonction :

Code C/C++ :
char ** renvoi_cmd( char ** tab , int Recup_Cmd )
{
	// pour la comparaison avec l'argument '|'
	char pipe[3] = { '|','\0'};
	int commande = 0;

	char **buf = NULL;
	int taille = 0;
	int cpt = 0 ;
	
	//Tant que je n'ai pas parcouru tout mon tableau...
	while(tab[cpt] != NULL)
	{
		// si le carractere courant est un pipee...
		if(strcmp(tab[cpt],pipe) == 0)
		{
			commande ++ ; 

			
			if(commande == Recup_Cmd)// Si il s'agit de la commande que nous voulons extraire...
			{
				while(strcmp(tab[cpt],pipe) != 0) // et tant que nous ne rencontrons pas le prochain pipe...
				{
					char **tmp;
    					++taille;
    					tmp = realloc(buf, taille);
					if(tmp != NULL)
					{ 
     						buf = tmp;
    						// on ajoute l'argument 
      						buf[taille - 1] = tab[cpt];
    					} 
					else
					{
       						 fprintf(stderr, "error realloc... IN === > \" Renvoi_cmd\" \n");
						exit(42);
   					}
					cpt++;
				}
				// Ajout du caractere de fin du tableau "NULL"
				char **tmp2;
    				++taille;
    				tmp2 = realloc(buf, taille);
				if(tmp2 != NULL)
				{ 
     					buf = tmp2;
    					// on ajoute le caractère 
      					buf[taille - 1] = NULL;
    				} 
				else
				{
       					 fprintf(stderr, "error realloc... IN === > \" Renvoi_cmd\" \n");
					exit(42);
   				}
				cpt++;
			}
		}
		
		// Si la commande souhaitée est la premiere...
		if(commande == Recup_Cmd)
		{
		
			while(strcmp(tab[cpt],pipe) != 0) // IDEM QUE CI-DESSUS
			{
				char **tmp;
    				++taille;
    				tmp = realloc(buf, taille);
				if(tmp != NULL)
				{ 
     					buf = tmp;
    					/* on ajoute l'argument */
      					buf[taille - 1] = tab[cpt];
    				} 
				else
				{
       					fprintf(stderr, "error realloc... IN === > \" Renvoi_cmd\" \n");
					exit(42);
   				}
				cpt++;
			}
			buf[taille] = NULL ;
		}
		cpt++;
  		
    		
	}
	return buf;
}




Merci par avance.
jeudi 5 mai 2011 à 18:30:06 | Re : Probleme C / systeme LINUX

patatalo

Membre Club Administrateur CodeS-SourceS
salut,

J'aurais plutôt commencé par parser les pipes avant de parser les commandes.

char *cmdline = "ps -L | wc -L";
char **cmds = { "ps -L", "|", "wc -L", NULL };
char **cmd = {"ps","-L",NULL};

@++
samedi 7 mai 2011 à 19:48:56 | Re : Probleme C / systeme LINUX

elite182

je vais essayer ca tout de suite !!
merci du conseil !

a++


Cette discussion est classée dans : taille, commande, tmp, cpt, buf


Répondre à ce message

Sujets en rapport avec ce message

envoi de fichier par socket [ par Anacr0x ] bon vouala, j'ai crée un serveur et un client, tt se passe bien, il parle entre eux et tt et tt. Par contre, quan je veu envoyer un fichier, ca merd ! Problème d'effacement de tableau en C++ (sans MFC) [ par Shad0w ] Voilà, mon code copie le contenu d'un fichier dans une edit :------------- char fil[LEN]; OPENFILENAME ofn; ZeroMemory(&ofn, sizeof(OPENFI Compilation d'un Programme C [ par medsetti ] Bonsoir, Entre mes mains un petit programme Win32 API que je veux le compiler, d'ailleurs selon mes modestes connaissances (je suis pas un informatici Le getch() ne fonctionne pas comme je veux [ par kobee12 ] Bonjour à tous,j'ai un ch'tit programme avec une fonction de saisie. J'utilise la fonction getch() pour récupérer chaque caractère que l'on tape.J'uti vc++ -> vb6 retour de fonctions (c) de type tableau en vb!! [ par matever ] Bonjours à tous!je dispose d'une fonction appartenant à une dll:POINT BUF_TMP[500];//globalPOINT * ENVOIS_BUF_TMP(){ MessageBox( NULL, "Envoi du tabl Parsage tableau [ par JAYDEN ] Bonjour,Désolé de vous déranger mais dans le cadre d'un projet j'ai besoin a un moment donner de parser une suite de binaire et de les stocker dans un Recuperer la notification EN_CHANGE [ par KinNoShishi ] Bonjour à tous, Je suis dans impasse depuis plusieurs heures maintenant... Je n'arrive pas à récupérer le message EN_CHANGE qui me permettrait de pou Problème : Mini Remote Shell [ par Abderrahmaine ] [^^happy10] Mini Remote Shell (mrsh) est une application client-serveur permettant d'exécuter des commandes sur une machine distante. Les commandes so


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 3,260 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales