2010-12-06 4 views
0

bash 대신 ash를 사용하는 임베디드 시스템에서 작업 중이며 크로스 컴파일 된 C 프로그램에서 스크립트를 호출하려고합니다.strcat 결과를 bash 시스템 호출로 사용하면 앰퍼샌드가 좋지 않음

나는 묻고있는 것처럼 작동하지만 백그라운드 프로세스에서는 작동하지 않습니다. 실제로 strcat 명령이 작동하지 않는 것처럼 보입니다. 그러나 그것은 왜 저를 상상합니다.

C에서 다소 새로운 것이지만 분명해야합니다.

코드 :

char mycall[230] = "/home/root/myscript.sh "; 
char inbackground[3]= " &"; 


// buf is initiated and will be used as a parameter, string length is about 20 characters 
strcat(buf,inbackground); 
strcat(mycall,buf); 

printf("%s", mycall); // this will display the command and parameter that was stored with 
    // in buf correctly, but without the ampersand at the end 
system(mycall); // executes correctly 

화면 표시 :

sh: syntax error: "&" unexpected 

가 왜 이런 일을합니까?

+0

경우 "20 자"이미 너무 짧다! – Clifford

+0

어떤 OS입니까? uCLinux? – AShelly

답변

1

내 생각에 buf에는 끝에 개행 문자 ('\n')가 포함되어 있습니다. 어쩌면 다른 표시 할 수없는 문자 일 수도 있습니다.

불필요한 것들을 걸러 내야합니다.

정확히 어떻게 buf이 설정되었는지 (또는 어떤 유형이 어떤지) 표시되지 않았으므로, 1buf1이 가리키는 모든 것이 추가 문자를위한 충분한 공간을 갖지 않을 수도 있습니다. 당신은 buf을 수정하는 것을 방지하기 위해 다음처럼 회씩 연결 rejigger 할 수 있습니다 :`buf`가

strcat(mycall,buf); 
strcat(mycall,inbackground);