lordosiris
Mitglied
Hi,
folgendes Kopierprogramm läuft irgendwie nicht. Die beiden Threads warten auf das Signal, das ich aber in der Main sende bzw. danach jeweils am Ende der Threads.
Sieht jemand einen Fehler?
folgendes Kopierprogramm läuft irgendwie nicht. Die beiden Threads warten auf das Signal, das ich aber in der Main sende bzw. danach jeweils am Ende der Threads.
Sieht jemand einen Fehler?
C:
#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
void *functionRead(void *argv);
void *functionWrite(void *argv);
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t condRead = PTHREAD_COND_INITIALIZER;
pthread_cond_t condWrite = PTHREAD_COND_INITIALIZER;
FILE* Datei1;
FILE* Datei2;
int n, x = 1, i = 0, j, c = 0, d = 0, rc;
pthread_t pRead;
pthread_t pWrite;
char ringpuffer[10000];
int main(int argc, char **argv)
{
if (argc == 4){
n = atoi(argv[3]);
} else {
printf("Need 3 Parameter: File1, File2, Charblock Size n!\n");
exit(EXIT_FAILURE);
}
printf("File to Copy: %s\nTarget: %s\nHow many chars: %s\n", argv[1], argv[2], argv[3]);
pthread_create(&pWrite, NULL, &functionWrite, ((void *)argv));
pthread_create(&pRead, NULL, &functionRead, ((void *)argv));
printf("Created, Sending Signal\n");
pthread_cond_signal(&condRead);
pthread_join(pWrite, NULL);
printf("Everything's done!\n");
return 0;
}
void *functionRead(void *argv){
char **args = (char **) argv;
if ((Datei1=fopen(args[1], "r")) == NULL){perror("fopen\n"); exit(EXIT_FAILURE);}
n = atoi(args[3]);
printf("Entered functionRead\n");
do{
pthread_mutex_lock(&mutex);
pthread_cond_wait(&condRead, &mutex);
i = 0;
for(i = 0; i<=n; i++){
c = fgetc(Datei1);
ringpuffer[i] = c;
i++;
}
x++;
pthread_mutex_unlock(&mutex);
pthread_cond_signal(&condWrite);
}while ((c=fgetc(Datei1)) != EOF);
if ((fclose(Datei1)) == EOF){perror("fclose\n"); exit(EXIT_FAILURE);}
return 0;
}
void *functionWrite(void *argv){
char **args = (char **) argv;
if ((Datei2=fopen(args[2], "w")) == NULL){perror("fopen\n"); exit(EXIT_FAILURE);}
n = atoi(args[3]);
printf("Entered functionWrite\n");
sleep(5);
for (j = 0; j < x; j++){
pthread_mutex_lock(&mutex);
pthread_cond_wait(&condWrite, &mutex);
fwrite(ringpuffer, 1, sizeof(ringpuffer), Datei2);
pthread_mutex_unlock(&mutex);
pthread_cond_signal(&condRead);
}
if ((fclose(Datei2)) == EOF){perror("fclose\n"); exit(EXIT_FAILURE);}
return 0;
}