C-Threaded программа: почему этот код дает мне ошибку "повторно объявлен как символ другого типа"? - PullRequest
0 голосов
/ 05 декабря 2018

Я пытаюсь написать клиентскую программу, которая будет загружать файл с сервера несколькими частями одновременно, используя несколько потоков.Я сначала пытаюсь успешно загрузить файл, используя только один поток, прежде чем двигаться дальше, но я получаю эту ошибку повторного объявления.Я объявил глобальную переменную index и хочу обновить ее внутри функции.

#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>
#define FILE_NAME "output.txt"

int index = 0;
FILE * file;

void * receiveChunk(void * arg){

    int sockfd = 0;
    char buffer[1024];
    char request[128];
    int status = -1;
    char ** hostInfo = (char **) arg; //might need three stars
    struct sockaddr_in serv_addr;
    int port = atoi(*(hostInfo + 2));
    int connection_status;

    while(status != 0){

    memset(&serv_addr, 0, sizeof(struct sockaddr));
    serv_addr.sin_family = AF_INET;
    serv_addr.sin_addr.s_addr = inet_addr(*(hostInfo + 1));
    serv_addr.sin_port = htons(port);

    sockfd = socket(PF_INET,SOCK_STREAM,0);
    connection_status = connect(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr));

    if(connection_status == -1){
        printf("Error connecting to socket\n");
    }

    file = fopen(FILE_NAME, "w");

    sprintf(request, "%d", index);
    send(sockfd, request, sizeof(request), 0);
    index++;

    recv(sockfd, &buffer, sizeof(buffer), 0);

    fwrite(buffer, 1, status, file);

    }

    return NULL;


}

int main(int argc, int ** argv){

    pthread_t thread_id;
    pthread_create(&thread_id, NULL, &receiveChunk, argv);
    pthread_join(thread_id, NULL);

return 0;
}

Насколько я могу судить, я не объявлял индекс ни в одной из функций, и я думал, что в C вы можете без проблем изменять глобальные переменные внутри функций.Мне очень жаль, если это какая-то очевидная ошибка или недоразумение, но любая помощь будет принята с благодарностью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...