gpt4 book ai didi

C pthreads错误

转载 作者:行者123 更新时间:2023-11-30 16:43:18 25 4
gpt4 key购买 nike

编程语言C
下面是使用多线程打印文件的代码。没有错误,但是代码无法正常工作。然而,编译时它会显示此警告 5 次: '从指针转换为不同大小的整数'

我已经尝试了所有我能想到的方法来解决这个问题,但没有成功,现在只是在黑暗中拍摄。有人看到我的错误在哪里吗?我们非常感谢任何帮助,并将很乐意根据要求提供任何其他信息。

谢谢。

#include <sys/mman.h>
#include <sys/stat.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdio.h>
#include <string.h>
#include <pthread.h>
#define NUM_THREAD 4


struct fileParams {
int fd;
int size;
};

void *printFile(void *stuff)
{
struct fileParams *params = stuff;
int addr;
addr=(unsigned char *)mmap(NULL, (int) &params->size, PROT_READ,
MAP_PRIVATE,(int) &params->fd,0);
write(STDOUT_FILENO, addr, (int)&params->size);
}

int main (int argc, char * argv[])
{
pthread_t threads[NUM_THREAD];
unsigned char *addr;
int fd,rc;
struct stat sb;
int numCPU=sysconf(_SC_NPROCESSORS_ONLN);
struct fileParams params;

printf("Number of aviable cores: %d\n",numCPU);
printf("Using 4 processors\n");

if (argc != 2 || strcmp(argv[1], "—help") == 0)
printf("Usage: %s file\n", argv[0]);

fd=open(argv[1],O_RDONLY);
if (fd == -1)
{
printf("File open fdailed.\n");
exit(EXIT_FAILURE);
}

if (fstat(fd, &sb) == -1)
{
printf ("fstat error\n");
exit(EXIT_FAILURE);
}
params.fd=fd;
params.size=sb.st_size/4;
for (int n = 0; n<4; n++)
rc=pthread_create(&threads[n],NULL,printFile,&params);

exit(EXIT_SUCCESS);
}

最佳答案

您需要为与函数匹配的函数提供输入 - 在需要整数的地方传递指针(或相反)将生成警告或错误,具体取决于编译选项。

mmap 将 size_t 作为第二个参数,但您将其转换为指针 (&params->size),与 mmaps 第 5 个参数相同。

去掉“&”,这样它只是一个整数。

mmap 还返回一个 void *,然后将其分配给 addr(一个 int)。

将 int 更改为 void * 指针类型,这也应该修复第五个警告。

关于C pthreads错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45358923/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com