2016-05-12 6 views
-2

Я изучаю программирование сокетов и в настоящее время работаю над кодом сервера ECHO. Я получаю эти ошибки:undefined ссылка на `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

Опечатки: 'writen' ->' write' и 'print' ->' printf'. –

+2

В стандартной библиотеке нет 'print', есть' (f) printf' и '(f) puts'. – ForceBru

+2

Что такое 'writen'? что такое 'print'? Я не знаю этих функций C? – user3078414

ответ

0

Используйте это:

write(sockfd,buff,n); 

потому writen не предопределенная функция в C. Таким образом, при компиляции программы, вы получаете неопределенную ссылку на `прописан.

Также делать printf("Error while reading"); вместо print().

0

У вас есть некоторые опечатки в вашем коде. Вместо writen используйте write и вместо print используйте printf. Если вы не ссылаетесь на эти функции, обязательно включите их должным образом, чтобы компилятор знал, где их найти.