[Linux/C] execl - int jako parametr

0

bez zbednych wstepow - chce przeslac jako parametr zmienna int a wymagany jest char.

uzylem rzutowania: (char)zmienna;
nie robilem nic i wyslalem
uzylem itoa
uzylem sprintf

w zadnym wypadku nie dziala. dla itoa w ogóle sie nie kompiluje jest jakis blad, kazdy inny przypadek powoduje ze potomek nie wyswietla sie w ogóle. probowalem wpisac jako char np wysylalem taki argument "1" - dziala wysmienicie.
dodatkowo, co zabawniejsze, jezeli zastosuje funkcje sprintf w stosunku do innej zmiennej, a argument wysylam normalnie - i tak nie dziala. po prostu uzycie tej funkcji powoduje ze ten fragment kodu w ogóle nie dziala.
i nie tylko, w kodzie w komentarzach jest przyklad jak probuje zrobic switcha lub if. bezskutecznie - ten sam efekt.

dla porzadku wrzuce kod:


#include<stdlib.h>
#include<unistd.h>
#include<stdio.h>
#include<string.h>
#include<sys/wait.h>
#include<sys/shm.h>
#include<sys/ipc.h>
#include<string.h>
#include<stdio.h>




int n = 4; // ILOŚĆ PROCESÓW

int main()
{

   int status;
   int i;
   int wynikForka;
   
   int macierzA[n][n];
   int macierzB[n][n];
   int macierzC[n][n];
   
   int *macA, *macB, *macC;
   
   zainicjujMacierze(n, macierzA, macierzB, macierzC);
   
   int id1, id2, id3;
   
   id1 = shmget(45281, sizeof(macierzA), IPC_CREAT|0600);
   id2 = shmget(45282, sizeof(macierzB), IPC_CREAT|0600);
   id3 = shmget(45283, sizeof(macierzC), IPC_CREAT|0600);
 
   if( !id1 ) printf("\nnie mozna utworzyc pamieci dla macierzy A");
   if( !id2 ) printf("\nnie mozna utworzyc pamieci dla macierzy B");
   if( !id3 ) printf("\nnie mozna utworzyc pamieci dla macierzy C");  
  
   macA = (int*)shmat(id1, NULL, 0);
   macB = (int*)shmat(id2, NULL, 0);
   macC = (int*)shmat(id3, NULL, 0);
  
   int a,b,c=0;
   for(a=0;a<n;a++)
   {
	   for(b=0;b<n;b++)
	   {
		  macA[c] = macierzA[a][b];
		  macB[c] = macierzB[a][b];
		  macC[c] = macierzC[a][b];
		  c++;
	   }
   }
      
   for(i=0;i<n;i++)
   {
	   wynikForka = fork();
	   switch( wynikForka )
	   {
			case -1: 
			{
				printf("\nwystąpił błąd podczas tworzenia procesu");
				i=n;
				break;
			}
			case 0:
			{					
				//char *arg1;
				//sprintf(arg1, "%d", 2);
				//arg1 = (char*)2;
				
				char *arg1 = "2";
				/*if (i == 0)  *arg1 = "0";
				if (i == 1)  *arg1 = "1";
				if (i == 2)  *arg1 = "2";
				if (i == 3)  *arg1 = "3";*/
			/*	switch(i)
				{
					case 0: *arg1 = "0";
					case 1: *arg1 = "1";
					case 2: *arg1 = "2";
					case 3: *arg1 = "3";
					case 4: *arg1 = "4";
					case 5: *arg1 = "5";
					case 6: *arg1 = "6";
					case 7: *arg1 = "7";
					case 8: *arg1 = "8";
				}*/
				execl("./kodPotomny",arg1,'\0');
				
				break;
			
			}
			default: 
			{			
				
			}
		}
   }
   
   
   
	return 0;
}

da sie cos temu zaradzic ?

0
execl("./program", "program", "1232345", 0);
0

no ale ja mam petle, i w niej tworze proces, kazdemu chcialbym przypisac aktualny licznik petli, zeby wiedzial co ma robic ..

0

Zrob z tego wskaznika zwyklego char'a i normalnie przypisz wartosc, bo nie mozesz zmienic wartosci wskaznika, ktory wskazuje na stala.
Potem execl("./program", "program", (char*)&arg, 0);

Zle uzyles wczesniej execl.

0

niestety nie dziala tak jak mowisz. czesciowo problem rozwiazalam nie uzywajac execl, wlasciwie to go obszedlem a nie rozwiazalem :P

1 użytkowników online, w tym zalogowanych: 0, gości: 1