1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- <chapter xml:id="throw_errno.h">
- <title><tt>__vic/throw_errno.h</tt></title>
- <chapter xml:id="throw_errno">
- <title><tt>throw_errno()</tt></title>
- <code-block lang="C++"><![CDATA[
- [[noreturn]] void throw_errno(const char *prompt);
- [[noreturn]] void throw_errno(const char *prompt, int err_no);
- ]]></code-block>
- <p>Бросает исключение, содержащее глобальное значение <tt>errno</tt> или
- данное <tt>err_no</tt>, соответственно. По умолчанию в данный момент типом
- исключения будет <xref to="libc_error"/>, однако это можно изменить во время
- компоновки переопределением данных функций. Например, можно использовать
- <tt>std::system_error</tt>. Для этого просто создайте cpp-файл со следующим
- содержимым в своём проекте:</p>
- <code-block lang="C++"><![CDATA[
- #include<__vic/throw_errno.h>
- #include<system_error>
- //----------------------------------------------------------------------------
- // Override library functions to throw std::system_error
- //----------------------------------------------------------------------------
- void __vic::throw_errno(const char *prompt, int err_no)
- {
- throw std::system_error(err_no, std::system_category(), prompt);
- }
- //----------------------------------------------------------------------------
- ]]></code-block>
- <p>Переопределения одной функции достаточно, так как вторая просто вызывает
- <tt>throw_errno(prompt, errno)</tt>.</p>
- <section><title>Пример</title>
- <code-block lang="C++"><![CDATA[
- ssize_t written = ::write(fd, buf, buf_size);
- if(written < 0) __vic::throw_errno("write");
- // ...
- ]]></code-block>
- </section>
- </chapter>
- </chapter>
|