#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. Я представил себе это: ( Спасибо Тому.