2011-10-26 9 views
1

有沒有辦法以命令SIOCGIFFLAGSSIOCSIFFLAGS以原子方式調用ioctl(問題也適用於所有sys調用)?例如,如果我將在IFF_PROMISC標誌添加到一個接口:如何通過命令SIOCGIFFLAGS和SIOCSIFFLAGS以原子方式調用ioctl

... 
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) 
... 

我怎麼能保證這兩個調用原子製成?

謝謝大家!

回答

2

簡單的答案是,你不能保證另一個進程沒有改變這些調用之間的標誌。

+0

我想到了這個:(謝謝湯姆。 – MirkoBanchi