Я пытаюсь написать клиентскую программу, которая будет загружать файл с сервера несколькими частями одновременно, используя несколько потоков.Я сначала пытаюсь успешно загрузить файл, используя только один поток, прежде чем двигаться дальше, но я получаю эту ошибку повторного объявления.Я объявил глобальную переменную 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 вы можете без проблем изменять глобальные переменные внутри функций.Мне очень жаль, если это какая-то очевидная ошибка или недоразумение, но любая помощь будет принята с благодарностью.