Макрос записывается так, как он выполняет проверку типа на ptr
. Можно использовать составной литерал вместо выражения оператора и вернуться к простой проверке указателей вместо использования __typeof__
, если компилятор не совместим с gcc:
#ifdef __GNUC__
#define member_type(type, member) __typeof__ (((type *)0)->member)
#else
#define member_type(type, member) const void
#endif
#define container_of(ptr, type, member) ((type *)( \
(char *)(member_type(type, member) *){ ptr } - offsetof(type, member)))
Вы можете получить то, что хотите, с помощью команды seq
, с помощью которой вы можете выполнить цикл в bash. Вы можете получить то, что вы хотите с этим или что-то подобное:
#!/bin/sh
touch /etc/squid/squid_access
for i in $(seq 1 500)
do
htpasswd /etc/squid/squid_access "new-user-$i"
done