Предполагая, что дескриптор открыт, C действительно можетwrite
(или, что более вероятно, использовать вызов более высокого -уровня, который в конечном итоге сведется кwrite(2)
)этому дескриптору. Вот этоwrite2three.c
#include <err.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc, char *argv[])
{
int fd;
if ((fd = dup(3)) == -1) err(1, "dup failed");
dprintf(fd, "hello\n");
exit(EXIT_SUCCESS);
}
.
$ make write2three
cc write2three.c -o write2three
$./write2three
write2three: dup failed: Bad file descriptor
$ rm out
$./write2three 3>out
$ cat out
hello
$
После этого вам может понадобиться очистить оболочку.
$ exec 3>&-
$
Обходной путь
Найдите конфликтующий порт и отключите его.
Это можно сделать с помощью HDAJackRetask -, выбрать правильную звуковую карту/кодек (, например. Realtek ALC892 ), найдите конфликтующий порт/контакт (, например. 0x1b )и переопределите его на «Не подключено». Затем нажмите «Применить сейчас».
Если появляется сообщение об ошибке «Устройство или ресурс занят», вам необходимо временно полностью отключить pulseaudio. В зависимости от обстоятельств это сработает:
После этого вы можете нажать «Установить переопределение загрузки», чтобы исправление применялось и при следующем перезапуске. Делайте это только тогда, когда вы уверены, что это работает, конечно.