2012-09-21 5 views
1

다음과 같이 C에서 execl 명령으로 생성 된 프로세스에 두 개의 주소 (32 비트)를 전달해야합니다. 첫 번째 프로그램에서 : 스폰 된 프로세스에 인수 전달이 C에서 작동하지 않습니다

char buffer[18]; 
    sprintf (&buffer[0],"%x\0 %x\0",lock, count); 
    arg_list[0]=&(buffer[0]); 
    arg_list[1]=&(buffer[10]); 
    execl ("/somedirectory/second_process", arg_list[0], arg_list[1], NULL); 

은 다음 나의 두 번째 프로그램에서 나는 시도하고 다음과 같이 주소를 구문 분석 :

if (argc != 2) { 
     printf ("PROCESS 2: Invalid number of arguments. Terminating %i\n", argc); 
     return -1; 
    } 

if (!(sscanf (argv[1],"%x",&lock)) || !(sscanf (argv[2],"%x",&count))) { 
     printf ("PROCESS 2: Problem with parameters passed in"); 
     return -1; 

을하지만 내 프로그램에 전달 된 매개 변수가 유효하지 않다는 오류를주는 유지합니다. 수신 된 인수를 인쇄하려고 할 때 프로그램이 중단됩니다.

printf ("The arguments passsed in are %s %s", argv[1], argv[2]); 

고정 : 내가 잘못 execl 함수 호출을했다

. 이 있었어야 :

execl ("/somedirectory/second_process", "second_process" arg_list[0], arg_list[1], NULL); 

또한이 과정에서 크리스는 아래의 제안 프로세스 이름의이 있어야하는데 전달 된 첫 번째 인수로

if (argc != 3) { 
     printf ("PROCESS 2: Invalid number of arguments. Terminating %i\n", argc); 
     return -1; 
    } 

.

감사합니다.

+0

"Excel 명령으로 프로세스 생성"- Excel? 이 Visual Basic은 무엇입니까? (그냥 농담이야.) –

+0

sorrry. 고정 :) – Falcata

+0

문제가없는 친구;) –

답변

5

배열은, 항상 0 C에 본사를두고 있습니다.

이제 은 일반적으로입니다. 프로그램 이름은 항상 첫 번째 (argv[0]) 인수로 전달해야합니다. 그래서 당신이 원하는 :

입니다
execl ("/somedirectory/second_process", "second_process", arg_list[0], arg_list[1], NULL); 

, 당신은 실제로 세 개의 인수 (두 번째 프로그램 그래서 argc == 3)을 통과해야한다.

1

귀하의 경우 argc은 3입니다. 실행 파일의 이름은 항상 첫 번째 인수입니다. 당신이 개 인수 argv[0]argv[1] 될 것이며, sscanf를가 실패 충돌하거나 중단됩니다 있도록 argv[2]는 널 포인터 수 있도록

+0

을 2로 설정하면 오류가 발생합니다. PROCESS 2 : 인수의 개수가 잘못되었습니다. 종료 중 2 – Falcata

+1

@Falcata 이유는 shf301이 3을 확인해야한다고했기 때문입니다. – mah

+0

이것은 거짓입니다. Exec 호출을 사용하면 argv [0] – singpolyma

관련 문제