2016-05-12 50 views
-2

我正在學習套接字編程,目前正在使用ECHO服務器代碼。我得到這些錯誤:未定義引用'writen'

serverecho.c:(.text+0x173): undefined reference to 'writen'
serverecho.c:(.text+0x180): undefined reference to 'print'

編譯時。我不確定我在這做錯了什麼。我的代碼是如下:

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include <sys/types.h> 
#include <time.h> 
#include <unistd.h> 

#include <sys/socket.h> 
#include <arpa/inet.h> 
#include <netinet/in.h> 

#define SA struct sockaddr 
#define MAXLINE 4096 

int main(int argc, char *argv[]) 
{ 
    int roockfd, confd; 
    pid_t childpid; 
    socklen_t len; 
    char buff[MAXLINE]; 
    struct sockaddr_in servaddr, cliaddr; 

    roockfd = socket(AF_INET, SOCK_STREAM, 0); 

    bzero(&servaddr, sizeof(servaddr)); 
    servaddr.sin_family = AF_INET; 
    servaddr.sin_port = htons(13); 
    servaddr.sin_addr.s_addr = htonl(INADDR_ANY); 

    bind(roockfd, (SA *)&servaddr, sizeof(servaddr)); 

    listen(roockfd, 5); 

    for (; ;) { 
     len = sizeof(cliaddr); 

     confd = accept(roockfd, (SA *)&cliaddr, &len); 
     printf("Connection from %s, port %d\n", 
     inet_ntop(AF_INET, &cliaddr.sin_addr, buff, sizeof(buff)), 
          ntohs(cliaddr.sin_port)); 
     if ((childpid=fork())==0) 
     { 
      close(roockfd); 
      echoserv(confd); 
      exit(0); 
     } 

     close(confd); 
    } 
} 

echoserv(int sockfd) /* echoserv function */ 
{ 
    ssize_t n; 
    char buff[MAXLINE]; 

again : 
    while((n=read(sockfd,buff,MAXLINE)>0)) 
     writen(sockfd,buff,n); 

     if(n<0) 
      print("Error while reading"); 
} 

錯誤而用gcc編譯:

[email protected]:~/Desktop/cprogs# gcc serverecho.c -o serverecho.out -lm /tmp/ccWL7GLc.o: In function 'echoserv':
serverecho.c:(.text+0x173): undefined reference to 'writen'
serverecho.c:(.text+0x1b9): undefined reference to 'print'
collect2: error: ld returned 1 exit status

+3

錯字:'writeen' - >'write'和'print' - >'printf'。 –

+2

標準庫中沒有'print',有'(f)printf'和'(f)puts'。 – ForceBru

+2

什麼是'writen'?什麼是'打印'?我不知道這些C函數? – user3078414

回答

0

使用此:

write(sockfd,buff,n); 

因爲writen不是C.預定義的功能,所以,當你編譯你的程序,你得到一個未定義的參考`writen」。

也做printf("Error while reading");而不是print()

0

你在你的代碼中的一些錯別字。而不是writen使用write而不是print使用printf。如果您不參考這些函數,請確保正確包含它們,以便編譯器知道在哪裏找到它們。