Как вызвать ioctl с помощью команд SIOCGIFFLAGS и SIOCSIFFLAGS атомарно - PullRequest
1 голос
/ 26 октября 2011

Есть ли способ вызвать ioctl (вопрос также действителен для всех вызовов sys) с помощью команд SIOCGIFFLAGS и SIOCSIFFLAGS атомарным способом? Например, если я добавлю флаг IFF_PROMISC в интерфейс:

...
struct ifreq ifr;
memset(&ifr, 0, sizeof(ifr));
strcpy(ifr.ifr_name, "eth0");

if (ioctl(sk, SIOCGIFFLAGS, &ifr) < 0)
...

ifr.ifr_flags |= IFF_PROMISC;
if (ioctl(sk, SIOCSIFFLAGS, &ifr) < 0)
...

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

Спасибо всем!

1 Ответ

2 голосов
/ 26 октября 2011

Простой ответ заключается в том, что вы не можете - нет никакого способа гарантировать, что другой процесс не изменил флаги между этими вызовами.

...