C pthreads错误

标签 c multithreading pthreads

编程语言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 作为第二个参数,但您将其转换为指针 (¶ms->size),与 mmaps 第 5 个参数相同。

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

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

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

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

相关文章:

c# - 用户在网站中触发一个漫长的过程

c++ - 并发读/写 OpenMp 中的共享变量

c - 使用条件变量的简单多线程堆栈实现

c - 64位架构下的C问题: pthread_kill()

c# - 比较 C 和 C# 中的汇编

c - 如何在 Flex 中定义 bool 值

c - 如何在 OS X 上获取另一个进程的 ASLR 幻灯片?

在Android中,当OP_WRITE存在时,Java nio OP_READ不执行?

使用 fscanf 计算文本文件中有多少个整数

c - sleep 函数是让所有线程都 sleep 还是只让调用它的线程 sleep ?