2015-11-21 8 views
2

Учитывая, что «C» как платформа разработки на linux-системе, у меня есть приложение, которое хочет установить уникальную и другую ошибку, чем predefined system errno. Теперь предположим, что, если я просто присвоить уникальный ERRNO, как егто = 201, то соответствующий вызов strerr (ошибка) даст мне результат как «Неизвестная ошибка», так как это пользовательские ERRNO, неизвестные системыКак добавить/зарегистрировать уникальную errno с соответствующим сообщением err в систему Linux?

Так Как я могу зарегистрировать/добавить эту уникальную ошибку (скажем, 201) в систему linux.

+0

Если у вас есть разрешение на root, вы можете добавить макрос для своей ошибки и проверки. –

+0

Это позволит мне назначить errno с помощью macro.eg: определить errno как #define EMYNUM 201, а затем использовать errno = EMYNUM. Но когда я сделаю strrerr (EMYNUM), он все равно вернет мне «Неизвестная ошибка 201», , Поскольку не существует исправляемой строки err, система знает. – user2589882

ответ

1

Вы можете использовать LD_PRELOAD трюк, чтобы поймать позвонить в strerror и у вас есть результат, если errno=201 см http://www.catonmat.net/blog/simple-ld-preload-tutorial/

+1

Спасибо за трюк. Однако я ищу какой-то файл, даже если его часть источника системы, где я могу добавить соответствующую строку err для моего err.exe: case ENOMEDIUM: return «No medium found», case EMYNUM: return «MY ERR MESSAGE» – user2589882

+0

Затем загрузите его здесь: https://www.gnu.org/software/libc/, измените и перестройте – fghj

4

В системе Linux, функция strerror реализуется glibc

Источником функции является в:

Струны расположены в:

Струны все зашитыми в Glibc.

Вы можете захватить source и построить его самостоятельно, добавив строки ошибок.

Более простой вариант состоит в том, чтобы сделать свою собственную процедуру печати ошибок, которая проверяет коды ошибок и печатает соответствующую строку, и, если это не ваш код ошибки, вместо этого он вызывает strerror.

Это имеет то преимущество, что ваше приложение не полагается на модифицированную версию glibc, поэтому переносится в другие системы.

+1

»* Более простым вариантом является создание собственной процедуры печати ошибок ... * это не просто самый простой, но и рекомендуемый способ, чтобы не сказать единственного * разумного * способа. – alk