【问题标题】:linux socket programming: Socket writing line to a file in clinux socket编程:在c中将套接字写入文件
【发布时间】:2015-09-29 01:35:56
【问题描述】:

大家好,我在尝试写入文件时遇到问题。我在网络课上,我们应该实现一个简单的 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;
}

【问题讨论】:

    标签: c linux file sockets


    【解决方案1】:

    此代码将每个字符的数值作为 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;
    }
    

    但是,例如您没有将长度传递给此函数,这是非常可疑的。我想看看从套接字读取的代码。

    【讨论】:

    • fwrite(string, sizeof char, strlen(string), fp); 可以是fprintf(fp, "%s", string);
    • 使用 printf("%s", buffer); 读取标准输出时,套接字工作正常。例如,如果我有一个带有 Line 1 line 2 Line 3 的文件。它将第 1 行第 2 行第 2 行打印到屏幕上,但是当我将缓冲区传递给函数时,它的行为有所不同。
    • @immibis 当然可以,但是由于解释格式字符串,它的效率较低。
    • @ejb @immibis 这是我现在遇到的错误fwrite(string, sizeof char, strlen(string), fp); ^ client.c:440:27: error: too few arguments to function 'fwrite'
    • @atkawa7 那么当你按照上面的方法修复它时发生了什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-19
    • 1970-01-01
    • 2015-11-29
    • 1970-01-01
    • 1970-01-01
    • 2021-06-24
    • 1970-01-01
    相关资源
    最近更新 更多