小编one*_*day的帖子

mq_open 错误号 13 权限被拒绝

我在尝试使用 mq_open() 调用创建 posix mq 时遇到了权限问题。我确实合并了此处提到的更改mq_open Permission denied我查看了其他相关帖子,例如https://groups.google.com/forum/#!topic/comp.unix.programmer/hnTZf6aPpbE但这也指向同一件事。

此外,在尝试编译时,我遇到了未识别 mq 调用的错误,并且在线显示通过在 gcc 中添加 -lrt 进行编译,post 能够编译,提到它,因为我不完全了解它的基本原理并且没有通过阅读帖子来理解它:)

gcc server_mq.c -lrt -o 服务器

错误编号为 13

哦,天哪,mqd 出了点问题!没有权限

#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <mqueue.h>
#include <errno.h>
#include <string.h>

#include "client_server.h"

#define PATH "/tmp/servermq"

int main(void)
{
    mqd_t mqd;
    mode_t omask;
    omask = umask(0);
    int flags = O_RDWR | O_CREAT | O_EXCL;
    struct mq_attr attr, *attrp;

    attr.mq_maxmsg = 5;
    attr.mq_msgsize = 1024;

    attrp = &attr;

    mqd = …
Run Code Online (Sandbox Code Playgroud)

c linux posix message-queue

3
推荐指数
1
解决办法
4294
查看次数

警告C4090:'function':不同的'const'限定符

我正在观察错误"警告C4090:'函数':不同的'const'限定词"因为下面的代码行.通过其他类似的问题,我理解(不是百分之百),这是因为

- > const char*EmployeeList []和我在EmployeeList的qsort中的声明

    #define Elements(array) (sizeof(array)/sizeof((array)[0]))

   const char *EmployeeList[] =
   {
      "Larry Page", "Sergy Brin", "Sundar Pichai", "Merrisa Mayer"
   };

// called from main
SortEmployee(EmployeeList, Elements(EmployeeList));

int Compare(const void *elemA, const void *elemB)
{
 ...
}

void SortEmployee(const char *EmployeeList[], size_t EmployeeCount)
{
    qsort(EmployeeList, EmployeeCount, sizeof(EmployeeList[0]), Compare);
}
Run Code Online (Sandbox Code Playgroud)

但是我无法解决它 - 任何指针如何为字符串数组做.

c pointers

1
推荐指数
1
解决办法
8001
查看次数

理解和实现 malloc

malloc 是如何在内部实现的?如何在以下必要条件下实现 malloc

• Malloc 至少分配请求的字节数

• malloc 返回的指针指向一个已分配的空间(即程序可以成功读写的空间;)

• 对 malloc 的其他调用不会分配此空间或其任何部分,除非该指针之前已被释放。

• malloc 应该易于处理:malloc 必须尽快终止(它不应该是 NP-hard !;)

• Malloc 还应提供调整大小和释放功能。

该函数遵循以下签名: Void * malloc(size_t size);

c malloc realloc

1
推荐指数
1
解决办法
4820
查看次数

如何将预处理器(宏)类型转换为输出int

我有一个非常简单的宏,我只想将其输出类型转换为int.怎么做?

#define Numbits(A) (sizeof(A)*CHAR_BIT)
Run Code Online (Sandbox Code Playgroud)

我试过了:

#define int Numbits(A)({int val; val = sizeof(A)*CHAR_BIT; return val;})
Run Code Online (Sandbox Code Playgroud)

但它也行不通

c casting c-preprocessor

0
推荐指数
1
解决办法
1535
查看次数

printf%e科学记数法在C中给出错误的值

我正在做一个非常基本的科学记数法打印输出.

但是,在我看来它不起作用,我无法弄清楚为什么?

码:

size_t result = 0;
printf("%e \n",result);
Run Code Online (Sandbox Code Playgroud)

打印的价值如下:

1.278341e-307
Run Code Online (Sandbox Code Playgroud)

做科学记数法的正确方法是什么?

c printf scientific-notation

0
推荐指数
1
解决办法
516
查看次数