コマンドラインからn個の引数arg1、arg2 .... argnを取得し、n個のスレッドを作成し、それぞれがテキストファイルargiを読み取り、偶数行を逆順に出力するプログラムを作成する必要があります。
問題は、私のプログラムがスレッドを作成して終了することですが、実際には何もしません。彼は、ランタイムごとに異なるいくつかのランダムな文字のみを出力します(メモリからの文字だと思います)。
以下は私のコードです:
#include <pthread.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define MAXLINE 100
pthread_t myThread[10];
pthread_mutex_t myMutex;
void * fileprint(void * numei) {
printf("Thread: %ld ...> %s\n", pthread_self(), (char*)numei);
FILE *fi;
char line[MAXLINE], *p;
pthread_mutex_lock(&myMutex);
int k=0;
fi = fopen((char*)numei, "r");
for ( ; ; ) {
k++;
p = fgets(line, MAXLINE, fi);
if (p == NULL) break;
line[strlen(line) - 1] = '\0';
if(k %2 ==0){
for(int j=strlen(line);j>=0;j++){
printf("%c", line[j]);
}
printf("%c","\n");
}
}
fclose(fi);
printf("Finished thread: %ld ...> %s\n", pthread_self(), (char*)numei);
pthread_mutex_unlock(&myMutex);
}
int main(int argc, char* argv[]) {
pthread_mutex_init(&myMutex, NULL);
printf("I'm the father...\n");
int i;
for (i = 1; argv[i]; i++) {
pthread_create(&myThread[i], NULL, fileprint, (void*)argv[i]);
printf("Created thread: %ld ...> %s\n", myThread[i], argv[i]);
}
for (i = 1; argv[i]; i++) {
pthread_join(myThread[i], NULL);
}
printf("I'm still the father...\n");
pthread_mutex_destroy(&myMutex);
return 1;
}
それで、誰が私に何が問題なのか教えてもらえますか?いろいろ改造しようと思ったのですが、どうにもなりません...