gpt4 book ai didi

c - 'err_quit' 在哪里定义

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:47:55 25 4
gpt4 key购买 nike

我正在研究关于生产者-消费者问题的程序(来 self 的操作系统课),当我编译它时,我遇到了这个问题:

razrlele@razrlele-ThinkPad:~/work/os$ gcc producerconsumer.c -lpthread -o producerconsumer
/tmp/ccyFGuJk.o: In function `main':
producerconsumer.c:(.text+0xb8): undefined reference to `err_quit'
producerconsumer.c:(.text+0xfc): undefined reference to `err_quit'
collect2: error: ld returned 1 exit status

我想知道 err_quit 在哪里定义的?

我的操作系统是 Ubuntu-gnome 14.04这是我的整个程序代码:

  1 #include <stdio.h>
2 #include <sys/types.h>
3 #include <semaphore.h>
4 #include <pthread.h>
5 #include <stdlib.h>
6
7 void *producer_handler(void *ptr);
8 void *consumer_handler(void *ptr);
9
10 sem_t mutex, blank, fill;
11 int *buffer;
12 int in = 0, out = 0, buffer_size = 10;
13
14 int main()
15 {
16 if((buffer = (int *)malloc(buffer_size *sizeof(int))) == NULL)
17 printf("can't allocate memory on heap\n");
18 sem_init(&mutex, 0, 1);
19 sem_init(&blank, 0, buffer_size);
20 sem_init(&fill, 0, 0);
21
22 int err;
23 pthread_t producer, consumer;
24 err = pthread_create(&producer, NULL, producer_handler, NULL);
25 if(err != 0)
26 err_quit("can't create thread: %s\n", strerror(err));
27 err = pthread_create(&consumer, NULL, consumer_handler, NULL);
28 if(err != 0)
29 err_quit("can't create thread: %s\n", strerror(err));
30
31 sleep(10);
32 return 0;
33 }
34
35 void *producer_handler(void *ptr)
36 {
37 while(1)
38 {
39 static int data = 0;
40 sem_wait(&blank);
41 sem_wait(&mutex);
42
43 buffer[in] = ++data;
44 printf("%d has been input to the buffer\n", data);
45 in = (in + 1 + buffer_size)%buffer_size;
46 sem_post(&mutex);
47 sem_post(&fill);
48 sleep(1);
49 }
50 return ((void *) 0);
51 }
52
53 void *consumer_handler(void *ptr)
54 {
55 while(1)
56 {
57 int fetch;
58 sem_wait(&fill);
59 sem_wait(&mutex);
60 fetch = buffer[out];
61 out = (out + 1 + buffer_size)%buffer_size;
62 printf("%d has been fetched\n", fetch);
63 sem_post(&mutex);
64 sem_post(&blank);
65 sleep(2);
66 }
67 return ((void *) 0);
68 }
69

最佳答案

聚会迟到了,但也许有人会发现它有用。

err_quit 不是标准的 C 函数。很可能,您的操作系统老师使用了来自 Advanced Programming in the UNIX Environment 的代码. Here是第三版的源代码。 err_quit定义在include/apue.h中,实现在lib/error.c中。

关于c - 'err_quit' 在哪里定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24011090/

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