2013-04-16 2 views
2
char* cmd[] = { "awk", "{ printf "%-10s %10s %10s %2s %2s \t%s \n", $3,$5,$6,$7,$8,$9 }", NULL}; 
execvp(cmd[0], cmd); 
perror("execvp of awk failed"); 

Я использую трубы для своей программы. Я хочу, чтобы выполнить эту команду в C помощью execvp:Передача awk (printf) in execvp

ls -l | awk '{ printf "%-10s %10s %10s %2s %2s \t%s \n", $3, $5,$6,$7,$8,$9 }' 

Проблема в том, что я не мог найти правильный синтаксис для printf в этом случае.

Может ли кто-нибудь указать, в чем моя ошибка?

+0

Прежде всего, по крайней мере, сделать это компиляции, убегая кавычки в строковый литерал. – 2013-04-16 18:49:21

+0

Сначала вы можете рассмотреть возможность сбрасывания двойных кавычек в инструкции printf. – gliptak

+0

Возможно, вы захотите передать 'cmd' вместо' prog2' функции 'execvp()'. –

ответ

3

Вам нужно бежать все обратные косые черты и двойных кавычек в команде:

char* cmd[] = { 
    "awk", 
    "{ printf \"%-10s %10s %10s %2s %2s \\t%s \\n\", $3, $5, $6, $7, $8, $9 }", 
    NULL 
}; 
+0

Спасибо за помощь –

+0

Обязательно нажмите галочку на мой ответ, если она решит вашу проблему. – duskwuff

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