linux socket编程:在c中写入一行文件的Socket

时间:2015-09-29 01:35:57

标签: c linux file sockets

嗨大家我在尝试写入文件时遇到问题。我在网络类中,我们应该实现一个简单的ftp服务器。它涉及读取文件并通过套接字将其发送到客户端。当它到达客户端时,您将输出写入文件。我已经实现了服务器和客户端,它们在打印时都能正常工作。但是,当我附加到文件时,它的工作方式不同。输出结果不同。现在不是像以前那样写所有的行,而是只将第一行写入文件或有时写入两行。我不知道导致问题的原因。这是代码。我传递了大小为4096的缓冲区。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <fcntl.h>
#include <unistd.h>

#include <sys/wait.h>
#include <sys/types.h>
#include <sys/socket.h>


#define MAX_LENGTH 4096

int write_line(char string[MAX_LENGTH]){
    FILE *fp;

    char* array = strdup(string);
    char* filename="client.txt";
    char* dir=get_current_dir_name();

    char fullpath[MAX_LENGTH];

    strcat(fullpath, dir);
    strcat(fullpath, "/");
    strcat(fullpath, filename);

    fp=fopen(fullpath, "a");

    if(fp==NULL)
    {
        return -1 ; 
    }

    int i;

    for (i=0; i<strlen(string); i++)
    {
        fprintf(fp,"%c",*(array+i));
    }
    fclose(fp);

    bzero(fullpath, MAX_LENGTH);

    return 0;
}

1 个答案:

答案 0 :(得分:0)

此代码将每个字符的数值以ASCII格式打印到文件中。你不可能想要那个。无论如何,你不需要大部分内容。

int write_line(char string[MAX_LENGTH]){

    FILE *fp = fopen("client.txt", "a");

    if(fp==NULL)
    {
        return -1 ; 
    }
    fwrite(string, sizeof char, strlen(string), fp);
    fclose(fp);
    return 0;
}

但是,例如你没有将长度传递给这个函数,这是非常可疑的。我希望看到从套接字中读取的代码。