Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > 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
 smile   

Автор: ffldove 16.5.2006, 17:14
а где именно 

Автор: _hunter 16.5.2006, 17:19
перед и после кода... 

Автор: Earnest 16.5.2006, 17:23
Модератор: Пожалуйста, один топик - один вопрос.

ffldove, создай свою тему!!!
 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)