удалить все места из определенного поля, разделенные запятой

В настольных системах, совместимых с Freedesktop, должен быть установлен следующий каталог: / usr / share / звуки / freedesktop / . Этот каталог должен содержать звуковые файлы по умолчанию, используемые вашим рабочим столом.

Теперь, чтобы воспроизводить звук во время выступления, вы можете использовать mplayer :

mplayer /usr/share/sounds/freedesktop/stereo/complete.oga
2
04.05.2019, 20:39
1 ответ

Когда программа закрывает файл блочного устройства, Linux очищает связанный кэш, заставляя программу ждать. Однако это относится только к последнему close(). Этого не произойдет, если что-то еще имеет открытое блочное устройство. В том числе, если какой-либо раздел того же блочного устройства все еще открыт.

Так что в общем случае лучше как-то синхронизировать устройство.

На всякий случай синхронизируйте устройство, запустив команду ddс параметром conv=fsync. Без этого ядро ​​не будет возвращать ошибки записи. Таким образом, вы заметите ошибку только в том случае, если заглянете в журнал ядра (dmesg).

Помимо ожидания всех кешированных операций записи, последний close()также сбрасывает весь кеш(kill_bdev()). Я убедился в этом сам, наблюдая за выводом команды free.

linux -4.20/fs/block _dev.c :1778

static void __blkdev_put(struct block_device *bdev, fmode_t mode, int for_part)
{
    struct gendisk *disk = bdev->bd_disk;
    struct block_device *victim = NULL;

    mutex_lock_nested(&bdev->bd_mutex, for_part);
    if (for_part)
        bdev->bd_part_count--;

    if (!--bdev->bd_openers) {
        WARN_ON_ONCE(bdev->bd_holders);
        sync_blockdev(bdev);
        kill_bdev(bdev);

Если вы не знакомы с кодом C, последний блок выше эквивалентен этому:

    bdev->bd_openers = bdev->bd_openers - 1;
    if (bdev->bd_openers == 0) {
        WARN_ON_ONCE(bdev->bd_holders);
        sync_blockdev(bdev);
        kill_bdev(bdev);
4
27.01.2020, 22:08

Теги

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