Что самый корректный путь состоит в том, чтобы передать массив функции?

Средства выделения, которые Вы упоминаете, являются средствами выделения пространства пользователя, совершенно отличающимися от средств выделения ядра. Возможно, некоторые базовые понятия могли использоваться в ядре, но оно должно будет быть реализовано с нуля.

Ядро уже имеет 3 средства выделения, ПЛИТУ, SLUB, СЛЯКОТЬ, (и был SLQB). SLUB в особенности разработан для работы хорошо над системами мульти-ЦП.

Как всегда, если у Вас есть идеи о том, как улучшить ядро, Ваши определенные предложения, предпочтительно в форме патчей, приветствуются на LKML :-)

8
22.06.2012, 12:44
3 ответа

Для передачи элементов массива как аргументов функции используйте ksh синтаксис для расширения элементов массива как список.

work_on_array "${myarray[@]}"

[@] суффикс делает это расширением массива. Двойные кавычки защищают каждый элемент от дальнейшего расширения (разделение и globbing). Результатом расширения не является в целом одно слово как он, обычно с двойными кавычками, но столькими же слов, сколько существуют элементы в массиве.

Энный элемент массива затем ${N}. Для доступа к нему необходимо использовать eval; посмотрите Использование ссылка на переменную "в" другой переменной

10
27.01.2020, 20:10
  • 1
    Спасибо. Вопрос: если результатом расширения не является одно слово, почему кавычки необходимы? Они могут быть опущены? Вы просто применяете свой совет "всегда кавычки, если у Вас нет серьезного основания не к"? :p –  rahmu 23.06.2012, 13:16
  • 2
    @rahmu кавычки необходим, чтобы не разделять и globbing на отдельных элементах. Рассмотреть myarray=("hello world" wibble) (2 элемента, первый из которых содержит пространство): work_on_array "${myarray[@]}" передачи 2 параметра hello world и wibble; work_on_array ${myarray[@]} передачи 2 параметра hello, world и wibble. И с myarray=(*), work_on_array ${myarray[@]} передает список файлов в текущем каталоге. (Следовательно это - один из многих случаев, где мой совет имеет практическое значение.) –  Gilles 'SO- stop being evil' 24.06.2012, 00:47
  • 3
    Исправьте меня, если я неправ, но я полагаю, что существует опечатка в том, что Вы записали: неупомянутое расширение передает 3 параметрических усилителя, не 2. –  rahmu 24.06.2012, 01:40
  • 4
    Исправьте меня, если я неправ, но я полагаю, что существует опечатка в том, что Вы записали: неупомянутое расширение передает 3 параметрических усилителя, не 2. –  rahmu 24.06.2012, 01:40
  • 5
    @rahmu Там является двумя параметрами: страх и удивление … и безжалостная эффективность. (Другими словами, Вы правы, существует опечатка: hello, world и wibble сделайте 3 параметра.) различие ABI –  Gilles 'SO- stop being evil' 24.06.2012, 01:56

Зависит от оболочки Korn ... последние версии AT&T ksh93 и mksh поддерживают это:

function echo_idx_array {
    nameref arr=$1
    idx=$2

    echo "${arr[idx]}"
}

set -A test -- a b c
echo_idx_array test 1

В моей текущей оболочке это выводит «b».

1
27.01.2020, 20:10

Можно использовать UDEV для получения сведений об аккумуляторе системы.

подключен к питанию
$ upower -i /org/freedesktop/UPower/devices/battery_BAT0
  native-path:          /sys/devices/LNXSYSTM:00/device:00/PNP0A08:00/device:0a/PNP0C09:00/PNP0C0A:00/power_supply/BAT0
  vendor:               Panasonic
  model:                42T4801
  serial:               624
  power supply:         yes
  updated:              Sat Oct 18 13:17:16 2014 (2 seconds ago)
  has history:          yes
  has statistics:       yes
  battery
    present:             yes
    rechargeable:        yes
    state:               fully-charged
    energy:              80.5788 Wh
    energy-empty:        0 Wh
    energy-full:         80.9892 Wh
    energy-full-design:  84.24 Wh
    energy-rate:         0.00372912 W
    voltage:             12.224 V
    percentage:          99.4933%
    capacity:            96.141%
    technology:          lithium-ion
от батареи
$ upower -i /org/freedesktop/UPower/devices/battery_BAT0
  native-path:          /sys/devices/LNXSYSTM:00/device:00/PNP0A08:00/device:0a/PNP0C09:00/PNP0C0A:00/power_supply/BAT0
  vendor:               Panasonic
  model:                42T4801
  serial:               624
  power supply:         yes
  updated:              Sat Oct 18 13:37:36 2014 (22 seconds ago)
  has history:          yes
  has statistics:       yes
  battery
    present:             yes
    rechargeable:        yes
    state:               discharging
    energy:              79.9524 Wh
    energy-empty:        0 Wh
    energy-full:         80.9892 Wh
    energy-full-design:  84.24 Wh
    energy-rate:         17.172 W
    voltage:             11.94 V
    time to empty:       4.7 hours
    percentage:          98.7198%
    capacity:            96.141%
    technology:          lithium-ion
  History (charge):
    1413653856  98.720  discharging
    1413653826  98.893  discharging
    1413653796  99.080  discharging
    1413653766  99.293  discharging
  History (rate):
    1413653856  17.172  discharging
    1413653826  17.399  discharging
    1413653796  17.453  discharging
    1413653766  17.345  discharging

Я никогда не видел ничего, что бы показывало время, прошедшее от батареи, поэтому вам придется рассчитать его по приведенному выше выходу. Кроме того, этот выходной сигнал обычно показывает «время зарядки», которое является грубым показателем того, как долго он находился на мощности.

-121--89430-

Если известен PID процесса, можно задать количество ядер ЦП, как описано здесь .

  • Если у вас нет набора задач , вы можете установить его как,

     sudo yum install util-linux
    
  • Например, чтобы назначить процесс ядру CPU 0 и 4, выполните следующие действия: следующее.

     набор задач -cp 0,4 9030
    

    С помощью опции «-c» можно указать список цифровых идентификаторов ядра ЦП, разделенных запятыми, или даже включить диапазоны (например, 0,2,5,6-10).

Также можно запустить программу с указанием конкретных ядер ЦП. Так что все эти детали присутствуют в вышеуказанной ссылке.

-121--100628-

Существует способ в bash 4.3 +, который, вероятно, происходит от ksh:

echo_idx_array () # array index
{
    local -n array=$1     # add nameref attribute
    local idx=$2
    echo "${array[idx]}"
}

$ names=(one two three four)
$ echo_idx_array names 2
three
$ days=([monday]=eggs [tuesday]=bread [sunday]=jam)    # associative array
$ echo_idx_array days sunday
jam

См. также объявить -n .

4
27.01.2020, 20:10

Теги

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