函数err_sys()在哪里定义?

时间:2011-08-14 18:24:00

标签: c network-programming

我在此代码中收到与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 个答案:

答案 0 :(得分:19)

将其置于代码之上:

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

perror在stdio.h中定义

err_sys在Richard Stevens的“UNIX网络编程:套接字网络API”一书中使用。据我所知,这并不常见。

编辑:修复代码错误

答案 1 :(得分:5)

这是来自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);
}

答案 2 :(得分:1)

err_sys()是由 W编写的几本书中使用的函数。理查德史蒂文斯。此函数用于打印发生的错误类型。

该函数在文本中的程序中使用自定义头文件"ourhdr.h"(或其他内容)。检查附录中的标题列表或函数定义。

答案 3 :(得分:1)

此功能的源代码(来自UNIX®环境中的高级编程,由W. Richard Stevens提供)可以在本书的网站上找到:http://www.apuebook.com/

答案 4 :(得分:0)

您必须指定包含此函数实现的lib文件。 这是编译c代码时常见的问题。

答案 5 :(得分:0)

下载您将在其中找到的图书的源代码文件夹: http://www.unpbook.com/src.html

打开源代码文件夹并选择lib文件夹。接下来打开名为error.c的文件。您将在其中找到定义的sys_err()。

答案 6 :(得分:0)

正如其他人所说,这段代码看起来像史蒂文斯的例子:Unix网络编程。如果您有本书,请查看附录D:教科书定义的其他源代码(以及示例中普遍使用的unp.h标头)。该文件太多,无法输入SO答案,但快速上网搜索Stevens&#34;标准错误函数&#34;通过实施返回了很多谷歌图书的结果。