В "Усовершенствованном Программировании в Среде UNIX", W. Richard Stevens говорит, что это - оптимизация производительности:
Путем определения самого высокого дескриптора мы интересуемся, ядро может постараться не проходить сотню неиспользованных битов в трех наборах дескриптора, ища биты, которые включены.
(1-й выпуск, страница 399)
При выполнении какого-либо вида системного программирования UNIX книга APUE настоятельно рекомендована.
ОБНОВЛЕНИЕ
fd_set
обычно может отследить до 1 024 дескрипторов файлов.
Самый эффективный способ отследить, который fds
установлены на 0
и которые установлены на 1
был бы bitset, таким образом, каждый fd_set
состоял бы из 1 024 битов.
В 32-разрядной системе длинное целое (или "слово") составляет 32 бита, так, чтобы средства каждый fd_set
1024/32 = 32 слова.
Если nfds
что-то маленькое, такой как 8 или 16, которым это было бы во многих приложениях, это только должно посмотреть в 1-м слове, которое должно ясно быть быстрее, чем взгляд во всех 32.
(См. FD_SETSIZE
и __NFDBITS
от /usr/include/sys/select.h
для значений на Вашей платформе.)
ОБНОВЛЕНИЕ 2
Относительно того, почему функциональная подпись не
int select(fd_set *readfds, int nreadfds,
fd_set *writefds, int nwritefds,
fd_set *exceptfds, int nexceptfds,
struct timeval *timeout);
Мое предположение, это - потому что код пытается сохранить все аргументы в регистрах, таким образом, ЦП может работать над ними быстрее, и если бы это должно было отследить дополнительные 2 переменные, то ЦП не мог бы иметь достаточных регистров.
Так, другими словами, select
выставляет деталь реализации так, чтобы это могло быть быстрее.
Я не знаю о терминале гнома а именно, но можно поместить стандарт xterm с определенный размер столбцов и строк как это:
xterm -geometry 80x24+50+100
Это составляет 80 столбцов, xterm с 24 строками, с северо-западным чесальщиком в (50, 100). Я полагаю, что X11 делает это - провода в (x, y), где левый верхний угол экрана (0,0), и координаты становятся больше направо и вниз.
Если Вы хотите управление для больше, чем просто окно терминала, можно написать сценарий общего размещения окна X GUI и т.д., при помощи wmctrl
и некоторые другой X
инструменты командной строки, но эта проблема положения запуска был обоснованно адресован названным приложением devilspie
.. Это находится в Ubuntu repo.
This tool will find windows as they are created and perform actions
on them, such as resizing, moving to another workspace, or pinning
them to all workspaces.
Можно управлять любым окном с wmctrl. Этот сценарий открывает несколько mtr окон, назовите их исключительно, и располагает их на экран.
#!/bin/bash
OPTS='--gtk --interval=30'
function place_mtr
{
host=$1
name=mtr_$1
xpos=$2
ypos=$3
xsize=$4
ysize=$5
mtr $OPTS $host &
sleep 1
wmctrl -r "My traceroute" -N "$name"
wmctrl -r "$name" -e 0,$xpos,$ypos,$xsize,$ysize
}
place_mtr www.debian.org 0 0 710 150
place_mtr www.ubuntu.com 0 203 710 150
place_mtr www.kernel.org 0 390 710 150
place_mtr www.yahoo.com 770 0 710 150
place_mtr www.facebook.com 770 203 710 150
place_mtr www.google.com 770 390 710 150
gnome-terminal
в моей Ubuntu это работает с ведущим двойным тире, - геометрия – Peter.O 25.10.2011, 20:42