2013-01-17 51 views
0

我写了一个程序发送一个简单的文本到服务器。 而我只是打印ftp >到我的终端。但该程序不打印ftp >到终端。为什么printf不起作用?在套接字编程

我的操作系统是OS X Mountain Lion。下面的代码片段供参考。

#include <stdio.h> 
#include <sys/types.h> 
#include <sys/socket.h> 
#include <stdlib.h> 
#include <unistd.h> 
#include <netinet/in.h> 
#include <string.h> 

#define MAXLINE 1024 
#define PORTNUM 3600 
int main(int argc, char** argv) 
{ 
    int sockfd; 
    char buf[MAXLINE]; 
    char* prompt = "ftp> "; 
    struct sockaddr_in serveraddr; 
    socklen_t addrlen; 

    sockfd = socket(AF_INET, SOCK_STREAM, 0); 

    memset(&serveraddr, 0x00, sizeof(serveraddr)); 
    serveraddr.sin_family   = AF_INET; 
    serveraddr.sin_addr.s_addr  = inet_addr("127.0.0.1"); 
    serveraddr.sin_port    = htons(PORTNUM); 

    addrlen = sizeof(serveraddr); 

    if (connect(sockfd, (struct sockaddr_in*)&serveraddr, addrlen)== -1) 
    { 
     perror("connect error :"); 
     return 0; 
    } 

    while(1) 
    { 
     //write(STDOUT_FILENO, prompt, strlen(prompt)); 
     printf("ftp> "); 
     read(STDIN_FILENO, buf, MAXLINE); 
     if(write(sockfd, buf, MAXLINE) <= 0) 
     { 
      perror("write error"); 
      return 0; 
     } 
    } 

    return 0; 
} 
+3

尝试在您的printf语句中添加'\ n'。让我知道这是否有帮助? – hd1

回答

3

printf()使用缓冲的I/O。关键是你的printf(),这是由格式字符串换行符('\n')通常触发之后调用fflush(stdout);

+0

但写功能没有fflush很好。我不明白为什么函数fflush()使用。你能说出原因吗? – inherithandle

+1

'write'不使用缓冲I/O,并立即写入缓冲器的所有内容输出插口。 – hroptatyr

相关问题