Почитать про libgloss, понять что надо самому разбирать пути переданные в параметре name и где-то хранить данные о том, что за файл и как был открыт. Понять, как именно ты хочешь "реализовать работу со своими устройствами" и… реализовать её.
Это и ежу понятно. Все эти дескрипторы уже где-то хранятся (например, stdin, stdout, stderr с чем-то ведь работают). КАК нужно работать с этими глобальными структурами? Вот суть вопроса.
tonyk_av, ежу может и понятно, но ты определённо не этот ёж.
КАК нужно работать с этими глобальными структурами?
Читай man на каждую функцию и реализовывай что требуется, а что за данные ты будешь хранить и как с ними будешь обращаться -- твоё дело. Например в _open можешь проверять, что ты хочешь обрабатывать переданный путь, выделять структуру в памяти и хранить там адрес начала данных файла и смещение в файле. Возвращать из _open адрес этой структуры. В _read можно копировать данные с текущего смещения в области данных файла в пользовательский буфер. В _write -- наоборот. В _lseek -- менять смещение в файле. В _close -- освобождать память выделенную под структуру.
tonyk_av, а если ты хочешь просто обработать стандартный вывод, то _open тебе вообще не нужен, файлы с дескрипторами 0, 1 и 2 считаются открытыми при старте. Просто реализовывай _write в дескрипторы 1 и 2 выводом в последовательный порт или куда ты хочешь, а _read из дескриптора 0 -- вводом оттуда же.
В man этого нет, к сожалению. По-умолчанию создаётся массив на 20 дескрипторов, а используется только 3. Изучаю примеры, может, получится научиться добавлять к этой таблице свои дескрипторы и научить stdio вызывать _write() и _read() с моими дескрипторами.