Результат strcat, используемый в качестве системного вызова bash, не похож на амперсанд - PullRequest
0 голосов
/ 06 декабря 2010

Я работаю над встроенной системой, использующей ash вместо 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

Почему это происходит?

1 Ответ

1 голос
/ 06 декабря 2010

Я предполагаю, что buf содержит символ новой строки ('\n') в конце. Может быть, какой-то другой не отображаемый персонаж.

Вам нужно отфильтровать ненужные вещи.

Так как нам не показано, как именно настроен buf (или тип ti), также возможно, что для того, на что указывает 1buf1, недостаточно места для дополнительных символов. вы можете захотеть перенастроить свои конкатенации, чтобы избежать необходимости изменять buf:

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