Как каждый открывает новое окно от оболочки с определенным размером и положением?

В "Усовершенствованном Программировании в Среде 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 выставляет деталь реализации так, чтобы это могло быть быстрее.

6
25.10.2011, 19:06
3 ответа

Я не знаю о терминале гнома а именно, но можно поместить стандарт xterm с определенный размер столбцов и строк как это:

xterm -geometry 80x24+50+100

Это составляет 80 столбцов, xterm с 24 строками, с северо-западным чесальщиком в (50, 100). Я полагаю, что X11 делает это - провода в (x, y), где левый верхний угол экрана (0,0), и координаты становятся больше направо и вниз.

10
27.01.2020, 20:23
  • 1
    Для gnome-terminal в моей Ubuntu это работает с ведущим двойным тире, - геометрия –  Peter.O 25.10.2011, 20:42

Если Вы хотите управление для больше, чем просто окно терминала, можно написать сценарий общего размещения окна 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.
3
27.01.2020, 20:23
  • 1
    Вы могли добавить примеры использования? Это сделало бы этот ответ этим намного более полезный. –  Martin Scharrer 21.04.2012, 12:12

Можно управлять любым окном с 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

1
27.01.2020, 20:23

Теги

Похожие вопросы