2015-10-30 3 views
3

Я пишу программу c с использованием Linux. Но за это время я использую терминал Linux для удаления файлов или копирования файлов и нескольких других вещей.Использование самоподготовленных переменных C на терминале linux

Как я сделать это с помощью команды в C:

system ("rm in/file.txt"); 

Но что, если я хочу файл Имя быть переменной я создаю в с как:

const char *signers[] = {"newfilename.txt"}; 

когда это Я стараюсь писать:

system ("rm in/signers"); // this does not work obviously since it is all in double quotes. But I can't seem to find the right way to do it 

Как-то мне нужно использовать эту Системную команду вместе с rm и в /, а затем мою переменную. Прошу прощения, если это основной вопрос. Я новичок.

+4

Используйте UNLINK системный вызов вместо системы –

+2

Да, пожалуйста, не. В библиотеке C есть целая куча функций, которые помогут вам действовать в файлах соответствующим образом. 'system' не является одним из них. –

+0

Связанный: http://stackoverflow.com/q/4291380/694576 – alk

ответ

6

Вам необходимо создать новую строку, которая составляет строку, которую вы передаете системе().

например.

char command[256]; 
const char *signers[] = {"newfilename.txt"}; 

snprintf(command, sizeof command, "rm %s", signers[0]); 
printf("Running command '%s'\n", command); 
system(command); 

Однако нет необходимости выполнять существующую команду, если у вас есть API C. Вы можете просто использовать определенную функцию Unix UNLINK:

int rc = unlink(signers[0]); 
if (rc != 0) { 
    perror("unlink failed"); 

или стандартную функцию C REMOVE:

int rc = remove(signers[0]); 
if (rc != 0) { 
    perror("remove failed"); 
+3

, пожалуйста, укажите уязвимость к экранированию оболочки с помощью 'system' – sehe

Смежные вопросы