Где определена функция err sys ()?
Я получаю ошибку, связанную с 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 ответов
поместите это поверх кода:
void err_sys(const char* x)
{
perror(x);
exit(1);
}
perror определяется в stdio.h
err_sys используется в книге "UNIX Network Programming: The sockets networking API" Ричарда Стивенса. Насколько я знаю, это не так уж часто.
edit: Исправлена ошибка кода
Это из TCP/IP иллюстрировано? Я помню, что видел это, и определение приведено в приложении:
#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);
}
err_sys()
- функция, используемая в нескольких книгах, написанных У. Ричард Стивенс. Эта функция используется для печати типа возникшей ошибки.
функция используется в программах в текстах с пользовательским заголовочным файлом "ourhdr.h"
(или что-то еще). Проверьте в приложении список заголовков или определение функции.
источник этой функции (из Advanced Programming in the UNIX® Environment, W. Richard Stevens) можно найти на веб-сайте Книги:http://www.apuebook.com/.
вы должны указать файл lib, который содержит реализацию для этой функции. Это общая проблема при компиляции кода C.
загрузите папку исходного кода книги, которую вы найдете в: http://www.unpbook.com/src.html
открыть папку исходного кода и выберите папку lib. Затем откройте файл error.c. Вы найдете sys_err (), определенный в нем.
Как уже говорили другие, этот код выглядит как примеры из Stevens: Unix Network Programming. Если у вас есть книга, посмотрите в приложении D: разное исходный код для определения текстовой книги (а также unp.заголовок H, который используется повсеместно в примерах). Файл слишком много, чтобы ввести в ответ SO, но быстрый поиск в интернете для Стивенса "стандартные функции ошибок" возвращает много результатов google books с реализациями.