Завершите работу использующего компьютеры блока

Вы можете использовать уменьшать

Здесь идея

  • На op объект создает ключи на основе идентификатора списка воспроизведения. [ 118]
  • Если ключ уже есть, мы добавляем новое значение в favourites
  • . Если нет, то мы инициализируем favourites с помощью {id, playlist_name , favourites:[]}, а затем нажимаем новое значение

.

let arr = [{"id": 1,"playlist_name": "chill_tunes","name": "Leo","artist_name": "John","genre": "Pop","rating": 42,"playlist_id": 1},{"id": 2,"playlist_name": "good_vibes","name": "Dan","artist_name": "Deer","genre": "Rock","rating": 52,"playlist_id": 1},{"id": 3,"playlist_name": "hump_day_happiness","name": "Nick","artist_name": "Legend","genre": "Rap","rating": 12,"playlist_id": 2}]

let final = arr.reduce((op,{id, playlist_name ,name ,artist_name ,genre ,rating , playlist_id}) => {
  op[playlist_id] = op[playlist_id] || {id, playlist_name , favourites:[]}
  op[playlist_id].favourites.push({id, playlist_id ,name ,artist_name ,genre ,rating})
  return op
},{})

console.log(Object.values(final))

15
задан Michael Myers 24 March 2009 в 17:44
поделиться

4 ответа

Назовите API-функцию ExitWindowsEx в kernel32.dll

1
ответ дан 1 December 2019 в 01:17
поделиться

Необходимо сказать, какое семейство процессоров это и который ОС Вы используете. Также, что полномочия Ваш код работает под - если это - код ядра затем, это имеет больше полномочий, чем пользовательский код.

Принятие Вы используете некоторого члена семейства Windows NT (включая XP или Vista) на семействе Intel x86 ЦП и Ваш код, нормально (пространство пользователя) код, затем... необходимо назвать встроенную функцию Windows, чтобы сделать это. Вы не можете только выполнить некоторую волшебную последовательность блока.

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

Если Вы пишете свою собственную ОС для x86, то необходимо посмотреть на ACPI (или APM) спецификации. Если код GPL в порядке, то соответствующие стандартные программы ядра Linux здесь (ACPI) и здесь (APM).

10
ответ дан 1 December 2019 в 01:17
поделиться

В Linux прочтите reboot (2).

интересующие исходные файлы:

kernel / sys.c kernel / exit.c и arch / x86 / kernel / apm.c

не полный ответ, но я думаю, что это хорошее начало. Мне нужно будет прочитать мой машинный код BIOS, чтобы увидеть, что они делают. но эта часть зависит от машины. maby, если вы знаете, какой блок управления питанием IC на вашей материнской плате, вы можете выяснить, какой порт ввода-вывода, регистрация и команда вам нужны. затем установите правильные состояния платы / устройств и затем подайте команду на выключение питания.

BIOS управляет питанием через INT 15h ah = 53h (так называемое Advanced Power Management aka APM) функция al = 07, используемая в Linux, - это установленный cmd состояния питания. параметры bx = 0001h означают все устройства, а cx = 0003k означают остановку.

7
ответ дан 1 December 2019 в 01:17
поделиться

Из arch / x86 / kernel / amp.c:

/**
 * apm_power_off - ask the BIOS to power off
 *
 * Handle the power off sequence. This is the one piece of code we
 * will execute even on SMP machines. In order to deal with BIOS
 * bugs we support real mode APM BIOS power off calls. We also make
 * the SMP call on CPU0 as some systems will only honour this call
 * on their first cpu.
 */

static void apm_power_off(void)
{
 unsigned char po_bios_call[] = {
  0xb8, 0x00, 0x10, /* movw  $0x1000,ax  */
  0x8e, 0xd0,  /* movw  ax,ss       */
  0xbc, 0x00, 0xf0, /* movw  $0xf000,sp  */
  0xb8, 0x07, 0x53, /* movw  $0x5307,ax  */
  0xbb, 0x01, 0x00, /* movw  $0x0001,bx  */
  0xb9, 0x03, 0x00, /* movw  $0x0003,cx  */
  0xcd, 0x15  /* int   $0x15       */
 };

 /* Some bioses don't like being called from CPU != 0 */
 if (apm_info.realmode_power_off) {
  set_cpus_allowed_ptr(current, cpumask_of(0));
  machine_real_restart(po_bios_call, sizeof(po_bios_call));
 } else {
  (void)set_system_power_state(APM_STATE_OFF);
 }
}

Теперь код находится в apm_32.c . Найдите "apm_power_off".

4
ответ дан 1 December 2019 в 01:17
поделиться
Другие вопросы по тегам:

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