- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
bool aiccu_os_install(void)
{
/* Check if IPv6 support is available */
if (access("/proc/net/if_inet6", F_OK))
{
/* Doing the modprobe doesn't guarantee success unfortunately */
(void)system("modprobe -q ipv6 2>/dev/null >/dev/null");
/* Thus test it again */
if (access("/proc/net/if_inet6", F_OK))
{
dolog(LOG_ERR, "No IPv6 Stack found! Please check your kernel and module configuration\n");
return false;
}
}
/* Try to load modules (SIT tunnel, TUN/TAP)
* They can be kernel builtins and there is no easy
* way to check if they are loaded/built except for
* trying to use them and fail at that point
*/
(void)system("modprobe -q sit 2>/dev/null >/dev/null");
(void)system("modprobe -q tun 2>/dev/null >/dev/null");
return true;
}
Но могу ошибаться, не пробовал использовать.
modprobe может обламаться, если не сомжет найти нужные модули, представлябющие нужные модулю символы,он же по сути граф зависимостей строит
Так что всё норм, system позовёт шелл, он символы конвейера распарсит.
Вот всякие exec и spawn (не помню их сигнатур), которые напрямую вызывают бинарник, обломаются, конечно, им нужно явно ссылку на sh подставлять.
https://pubs.opengroup.org/onlinepubs/9799919799/functions/system.html
брать путь к ш реализаиця должна через confstr, но примерно во всех юниксах там почти всегда будет /bin/sh (но в теории может и не)
там даже более того написино
>>>
Finally, POSIX.1-2024 requires the command to be interpreted as in the shell command language defined in the Shell and Utilities volume of POSIX.1-2024.
>>>
Либо, чтобы выполняла свой код, но результат был такой же, как после этого вызова.
Вот в чём отличие system от execl.