iptables из функции execve c не принимает флаги

Используйте pipeviewer для просмотра итогов / скорости передачи.

  1. sudo apt-get install pv
  2. dd if = ubuntu-14.04.3-desktop-i386.iso | pv | sudo dd of = / dev / sda1

Это покажет вам текущую скорость, а также общий объем передачи для dd . Вы можете указать размер файла и получить расчетное время прибытия и процент завершения, например, используя pv -s 700m .

0
19.03.2018, 16:28
2 ответа

Вам нужно разделить свои аргументы так же, как это сделала бы оболочка:

#include <unistd.h>
int main() {
    char *args[10];
    int i = 0;
    args[i++] = "/usr/sbin/iptables";
    args[i++] = "-I";
    args[i++] = "INPUT";
    args[i++] = "-p";
    args[i++] = "tcp";
    args[i++] = "--dport";
    args[i++] = "80";
    args[i++] = "-j";
    args[i++] = "ACCEPT";
    args[i++] = NULL;
    execve(args[0], args, NULL);
}

Оболочка разбивается на все пространства.

2
28.01.2020, 02:32

Флаги и их аргументы должны быть отдельными:

int main() {
    char *args[] = {
      "/usr/sbin/iptables",
      "-I", "INPUT",
      "-ptcp",
      "--dport", "80",
      "-j", "ACCEPT",
      NULL
    };
...
}

Для команд, в которых опция и аргумент опции могут быть заданы как один аргумент, между ними не должно быть пробела (, например, tailи -n6), или должен быть разделитель, например =, в зависимости от по команде, например grepи --color=always.

0
28.01.2020, 02:32

Теги

Похожие вопросы