Где определена функция err_sys ()? - PullRequest
9 голосов
/ 14 августа 2011

Я получаю ошибку, связанную с err_sys() в этом коде:

#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
int main()
{
    int sockfd;

    if ((sockfd=socket(AF_INET,SOCK_STREAM,0))<0)
        err_sys("can't create socket");

    close(sockfd);
    return 0;
}

Я получаю ошибку компоновщика:

/tmp/cciuUVhz.o: In function `main':
getsockopt.c:(.text+0x38): undefined reference to `err_sys'
collect2: ld returned 1 exit status

Где определена функция err_sys()

Ответы [ 7 ]

19 голосов
/ 14 августа 2011

Поместите это поверх вашего кода:

void err_sys(const char* x) 
{ 
    perror(x); 
    exit(1); 
}

perror определен в stdio.h

err_sys используется в книге "Сетевое программирование UNIX: API-интерфейс для сокетов"Ричард Стивенс.Насколько я знаю, это не что-то общее.

edit: исправлена ​​ошибка кода

5 голосов
/ 14 августа 2011

Это из TCP / IP Illustrated? Я помню, как видел это, и определение приводится в приложении:

#include <errno.h>
#include <stdarg.h>
/*
 * Print a message and return to caller.
 * Caller specifies "errnoflag".
 */
static void
err_doit(int errnoflag, int error, const char *fmt, va_list ap)
{
    char    buf[MAXLINE];
    vsnprintf(buf, MAXLINE, fmt, ap);
    if (errnoflag)
        snprintf(buf+strlen(buf), MAXLINE-strlen(buf), ": %s",
    strerror(error));
    strcat(buf, "\n");
    fflush(stdout);     /* in case stdout and stderr are the same */
    fputs(buf, stderr);
    fflush(NULL);       /* flushes all stdio output streams */
}


/*
 * Fatal error related to a system call.
 * Print a message and terminate.
 */
void
err_sys(const char *fmt, ...)
{
    va_list     ap;
    va_start(ap, fmt);
    err_doit(1, errno, fmt, ap);
    va_end(ap);
    exit(1);
}
1 голос
/ 28 июля 2013

Источник этой функции (из книги «Расширенное программирование в среде UNIX®» У. Ричарда Стивенса) можно найти на веб-сайте книги: http://www.apuebook.com/.

1 голос
/ 19 июня 2013

err_sys() - это функция, используемая в нескольких книгах, написанных W. Ричард Стивенс . Эта функция используется для печати, какой тип ошибки произошел.

Функция используется в программах в текстах с пользовательским заголовочным файлом "ourhdr.h" (или чем-то еще). Проверьте в приложении список заголовков или определение функции.

0 голосов
/ 08 июня 2017

Как уже говорили другие, этот код выглядит как примеры из Stevens: Unix Network Programming.Если у вас есть книга, посмотрите в приложении D: разные исходные коды для определения учебника (а также заголовок unp.h, который широко используется в примерах).Файл слишком большой, чтобы его можно было ввести в SO-ответ, но быстрый поиск в Интернете «стандартных функций ошибок» Стивенса возвращает множество результатов книг Google с реализациями.

0 голосов
/ 03 сентября 2016

Загрузите папку с исходным кодом книги, в которой вы найдете ее: http://www.unpbook.com/src.html

Откройте папку с исходным кодом и выберите папку lib. Затем откройте файл с именем error.c. Вы найдете sys_err (), определенный в нем.

0 голосов
/ 14 августа 2011

Вы должны указать файл lib, который содержит реализацию для этой функции. Это распространенная проблема при компиляции кода c.

...