gpt4 book ai didi

c - 编译信号量示例时遇到问题

转载 作者:行者123 更新时间:2023-11-30 18:41:14 24 4
gpt4 key购买 nike

我正在尝试了解信号量,但每次尝试编译示例时都会出现相同的错误(我现在已经尝试了大约 4 个)。

所以下面的代码不是我自己的,而是取自这里:“http://blog.superpat.com/2010/07/14/semaphores-on-linux-sem_init-vs-sem_open/

#include <semaphore.h>
#include <stdio.h>
#include <errno.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>

#include <sys/stat.h>
#include <fcntl.h>
#include <sys/mman.h>

int main(int argc, char **argv)
{
int fd, i,count=0,nloop=10,zero=0,*ptr;
sem_t mutex;

//open a file and map it into memory

fd = open("log.txt",O_RDWR|O_CREAT,S_IRWXU);
write(fd,&zero,sizeof(int));
ptr = mmap(NULL,sizeof(int),PROT_READ |PROT_WRITE,MAP_SHARED,fd,0);
close(fd);

/* create, initialize semaphore */
if( sem_init(&mutex,1,1) < 0)
{
perror("semaphore initilization");
exit(0);
}
if (fork() == 0) { /* child process*/
for (i = 0; i < nloop; i++) {
sem_wait(&mutex);
printf("child entered crititical section: %d\n", (*ptr)++);
sleep(2);
printf("child leaving critical section\n");
sem_post(&mutex);
sleep(1);
}
exit(0);
}
/* back to parent process */
for (i = 0; i < nloop; i++) {
sem_wait(&mutex);
printf("parent entered critical section: %d\n", (*ptr)++);
sleep(2);
printf("parent leaving critical section\n");
sem_post(&mutex);
sleep(1);
}
exit(0);
}

所以问题是,每次我编译此代码(和其他示例)时,我都会收到编译错误:“error:”:21:68: error: invalid conversion from 'void*' to 'int*' [- f允许]"

引用这一行:

ptr = mmap(NULL,sizeof(int),PROT_READ |PROT_WRITE,MAP_SHARED,fd,0);
close(fd);

知道为什么吗?

最佳答案

1) 不要使用 C++ 编译器编译 C 代码。 C 和 C++ 是不同的。

2) C 允许将 (void *) 分配给任何其他指针类型,而无需显式类型转换。

 For example: 

char * p = malloc (10); // where as return type of malloc is void *

3) C++ 不允许将 (void *) 分配给任何其他指针类型,除非显式类型转换。

4) 所以,使用 gcc 而不是 g++。

希望它有助于理解一些扩展。

关于c - 编译信号量示例时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22550629/

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