【发布时间】:2015-12-19 09:36:54
【问题描述】:
我需要opnsrc() 函数来返回它读取的字节数。当我尝试运行下面的代码时,会引发 SEGFAULT。 GDB 显示罪魁祸首是来自opnsrc() 的int *rvi = (int *) rvp;。我打算rvp 存储来自opnthrd() 的返回值。如何解决这个问题?谢谢。
static char iobfr[512];
static void *
opnthrd(void *argp)
{
memset(iobfr, '\0', 512);
char *fname = (char *) argp;
FILE *fp = fopen(fname, "r");
if (!fp) {
pthread_exit((void *) -1);
}
int i = 0;
int c;
for (c = fgetc(fp); c != EOF; c = fgetc(fp)) {
iobfr[i++] = c;
}
iobfr[i] = '\0';
fclose(fp);
fp = NULL;
pthread_exit((void *) i);
}
static int
opnsrc(char *fnam)
{
pthread_t thrd;
void *rvp;
int rc = pthread_create(&thrd, NULL, opnthrd, fnam);
if (0 != rc) {
return (-1);
}
rc = pthread_join(thrd, &rvp);
if (0 != rc) {
return (-1);
}
if (!rvp) {
return (-1);
}
int *rvi = (int *) rvp;
return *rvi;
}
int main()
{
int ccnt = opnsrc("/var/tmp/hello.pl");
printf("%d bytes read\n", ccnt);
return 0;
}
【问题讨论】:
标签: c multithreading io