簡體   English   中英

linux socket編程:在c中將行寫入文件

[英]linux socket programming: Socket writing line to a file in c

嗨,伙計們,我在嘗試寫入文件時遇到問題。 我在網絡課上,我們應該實現一個簡單的 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;
}

此代碼將每個字符的數值以 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;
}

但是,例如您沒有將長度傳遞給這個函數是非常可疑的。 我想看看從套接字讀取的代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM