| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > SOS срочно!!! |
| Автор: DimonNew 15.5.2006, 13:03 |
| Народ помогите пожалуйста разобраться в коде, искалл литературу ничего не нашел: #include <errno.h> #include <stdio.h> #include <string.h> #include <unistd.h> #include <wchar.h> #include "libioP.h" static void perror_internal (FILE *fp, const char *s, int errnum) { char buf[1024]; const char *colon; const char *errstring; if (s == NULL || *s == '\0') s = colon = ""; else colon = ": "; errstring = __strerror_r (errnum, buf, sizeof buf); if (_IO_fwide (fp, 0) > 0) (void) __fwprintf (fp, L"%s%s%s\n", s, colon, errstring); else (void) fprintf (fp, "%s%s%s\n", s, colon, errstring); } void perror (const char *s) { int errnum = errno; FILE *fp; int fd = -1; if (__builtin_expect (_IO_fwide (stderr, 0) != 0, 1) || (fd = fileno (stderr)) == -1 || (fd = __dup (fd)) == -1 || (fp = fdopen (fd, "w+")) == NULL) { if (__builtin_expect (fd != -1, 0)) __close (fd); /* Use standard error as is. */ perror_internal (stderr, s, errnum); } else { perror_internal (fp, s, errnum); /* Close the stream. */ fclose (fp); } } libc_hidden_def (perror) Заранее благодарю за помощь. |
| Автор: _hunter 15.5.2006, 13:12 |
| что ты понимаеш под "помогите разобраться в коде"? |
| Автор: DimonNew 15.5.2006, 13:14 |
| не могу понять что вытворяеться в этой части void perror (const char *s) { int errnum = errno; FILE *fp; int fd = -1; if (__builtin_expect (_IO_fwide (stderr, 0) != 0, 1) || (fd = fileno (stderr)) == -1 || (fd = __dup (fd)) == -1 || (fp = fdopen (fd, "w+")) == NULL) { if (__builtin_expect (fd != -1, 0)) __close (fd); /* Use standard error as is. */ perror_internal (stderr, s, errnum); } else { perror_internal (fp, s, errnum); /* Close the stream. */ fclose (fp); } } libc_hidden_def (perror) Задание у меня такое для защиты лабы. Студент все таки ) |
| Автор: Doc_d0s 15.5.2006, 13:44 |
| а ты спроси кто прогу писал пусть расскажет, а конкретнее что непонятно!? |
| Автор: DimonNew 15.5.2006, 13:48 |
| Если те челы умерли пойти души вызвать??? Это функция Perror, которая использует библ errno |
| Автор: Wowa 15.5.2006, 13:53 |
| Модератор: Название темы должно отражать ее суть! |
| Автор: Earnest 15.5.2006, 16:18 |
| Эта функция выводит сообщение об ошибке либо в стандартный поток ошибок, либо в таинственный fp, попыткой добраться до которого занимается вся первая часть if. Насколько я понимаю, fp - это просто дубликат strerr (т.е. еще одно подключение к тому же потоку). А что уж она пытается проверить с помощью функций __builtin_expect и _IO_fwide остается только гадать... Если нашел код perror, то найди и эти. |
| Автор: nikitao 16.5.2006, 16:27 |
| ffldove, DimonNew, используйте теги code=cpp /code |
| Автор: ffldove 16.5.2006, 17:14 |
| а где именно |
| Автор: _hunter 16.5.2006, 17:19 |
| перед и после кода... |
| Автор: Earnest 16.5.2006, 17:23 |
| Модератор: Пожалуйста, один топик - один вопрос. ffldove, создай свою тему!!! |