Правда ли, что в Linux нет системного вызова с более чем 6 параметрами? - PullRequest
3 голосов
/ 22 марта 2011

В unistd.h есть _syscall0 ~ _syscall6:

_syscall6(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4,type5,arg5,type6,arg6)

Так мой вывод правильный или нет?

Ответы [ 2 ]

4 голосов
/ 22 марта 2011

Цитируется:

Древняя история

Более ранние версии Linux могли обрабатывать только четыре или пять параметров системных вызовов, и, следовательно, системные вызовы select () (5 параметров) и mmap() (6 параметров) имел обыкновение иметь единственный параметр, который был указателем на блок параметров в памяти.Начиная с Linux 1.3.0 поддерживаются пять параметров (и более ранний выбор с блоком памяти был переименован в old_select), а с Linux 2.3.31 поддерживаются шесть параметров (и более ранний mmap с блоком памяти сменился новым mmap2).

3 голосов
/ 22 марта 2011

Похоже, что эта функция принимает 7 параметров (0-6), но на этой веб-странице написано 6

Отсюда: http://www.win.tue.nl/~aeb/linux/lk/lk-4.html

Ранние версии Linux могли обрабатывать только четыре или пять системных вызовов параметры, и, следовательно, система вызовы select () (5 параметров) и mmap () (6 параметров) используется для один параметр, который был указателем на блок параметров в памяти. поскольку Linux 1.3.0 пять параметров поддерживается (и ранее выберите с блок памяти был переименован в old_select), а начиная с Linux 2.3.31 шесть параметров поддерживаются (и более ранние с блоком памяти сменилось новый mmap2).

...