[英]fscanf not reading file contents ( using pthreads ) in C
我在使用 pthreads 和读取文件时遇到问题。 我们的教授主要只教理论,我一直在努力学习。 正如标题所说,我在使用 fscanf 读取文件时遇到问题。 我的主要功能如下。
#include <stdlib.h>
#include <pthread.h>
#include <time.h>
#define MAX 15000
void createandFillFile(char*);
void* determineMin(void*);
int main(int argc, char* argv[])
{
//determins if argc is less than 2
if(argc < 2)
{
printf("format is:./a.out <filename> \n");
return -1;
}
createandFillFile(argv[1]);
pthread_attr_t attr;
pthread_t minThread; //maxThread, avgThread;
//series of if statements to determine if the pthread functions have been executed correctly
if(pthread_attr_init(&attr) != 0)
{
printf("ERROR: THREAD INITIATION FAILURE");
return -1;
}
if(pthread_create(&minThread,&attr,determineMin,(void*)argv) != 0)
{
printf("ERROR: THREAD CREATION FAILURE");
return -1;
}
if(pthread_join(minThread,NULL) != 0)
{
printf("ERROR: THREAD JOIN FAILURE");
return -1;
}
return 0;
}
我创建文件然后用 -200 到 200 范围内的 15000 个数字填充它的函数如下。
{
//creates the file pointer
FILE *fileptr;
//creates the file
fileptr = fopen(fileName,"w");
int lower = -200;
int upper = 200;
int number;
srand(time(NULL));
for(int i=0; i<MAX; i++)
{
number = (rand() % (upper-lower+1))+lower;
fprintf(fileptr,"%i ",number);
}
fclose(fileptr);
}
使用 pthread minThread 的最后一个函数如下。
void* determineMin(void* fileName)
{
//creates the file pointer
FILE *fileptr;
//creates the file
fileptr = fopen(*(char**)fileName,"r");
int number=0, min=0;
if(fileptr)
{
fscanf(fileptr,"%i ",&number);
min = number;
printf("%i",min);
}
fclose(fileptr);
}
我遇到的问题是这个。 在类型转换和取消引用 void* fileName 并使用它打开文件之后。 该文件成功打开,但它不会读取任何输入。 我目前没有遍历每个数字,因为有 15000 个,所以我只尝试了一次,但它似乎不起作用。 是否有使用带有 pthreads 的文件的规则我忘记了,这会阻止 fscanf 正常工作?
您将argv
作为线程参数传递。 所以*(char**)fileName
实际上是argv[0]
这绝对不是你想要的。 试试((char**)fileName)[1]
。
PS您可以使用NULL
代替&attr
IIRC(如果您实际上不需要c的属性)。
您将argv
作为pthread_create()
参数传递。 它与argv[0]
类似,它表示可执行文件本身。 要传递文件名,请将argv
替换为argv[1]
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.