В настольных системах, совместимых с Freedesktop, должен быть установлен следующий каталог: / usr / share / звуки / freedesktop /
. Этот каталог должен содержать звуковые файлы по умолчанию, используемые вашим рабочим столом.
Теперь, чтобы воспроизводить звук во время выступления, вы можете использовать mplayer
:
mplayer /usr/share/sounds/freedesktop/stereo/complete.oga
Когда программа закрывает файл блочного устройства, 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);