Как вызвать ioctl с помощью команд SIOCGIFFLAGS и SIOCSIFFLAGS атомарно

#linux #atomic #system-calls

#linux #атомарный #системные вызовы

Вопрос:

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

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

if (ioctl(sk, SIOCGIFFLAGS, amp;ifr) < 0)
...

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

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

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

Ответ №1:

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

Комментарии:

1. Я представил себе это: ( Спасибо Тому.