mkfifo函数

mkfifo函数用于创建一个命名管道(FIFO),它的原型如下:

int mkfifo(const char *pathname, mode_t mode);

该函数的第一个参数是一个字符串,表示要创建的命名管道的路径名。第二个参数是一个整数,表示创建管道的权限。

mkfifo函数的返回值为0表示成功,-1表示失败。

举个例子,我们可以创建一个名为“myfifo”的命名管道,代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <sys/types.h>

int main()
{
    int ret;
    char *fifo = "myfifo";

    // 创建命名管道
    ret = mkfifo(fifo, 0666);
    if (ret < 0) {
        perror("mkfifo");
        exit(1);
    }

    return 0;
}

在上面的代码中,我们使用了mkfifo函数创建了一个名为“myfifo”的命名管道,并且设置了它的权限为0666。

除了创建命名管道之外,我们还可以使用open函数打开一个已经存在的命名管道。例如:

#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <sys/types.h>

int main()
{
    int fd;
    char *fifo = "myfifo";

    // 打开命名管道
    fd = open(fifo, O_WRONLY);
    if (fd < 0) {
        perror("open");
        exit(1);
    }

    // 向命名管道写入数据
    write(fd, "hello world", 11);

    // 关闭命名管道
    close(fd);

    return 0;
}

在上面的代码中,我们使用open函数打开了一个已经存在的命名管道,并向它写入了一些数据。注意,我们需要使用O_WRONLY标志来指定打开管道的方式。

ret = mkfifo(fifo, 0666);中第二个参数0666表示什么?举例说明

第二个参数0666表示创建的命名管道的权限,它是一个八进制数。

在Linux系统中,每个文件都有一个所有者和一组权限位,权限位用于控制不同用户对该文件的访问权限。权限位一般分为三组,分别是所有者权限、同组用户权限和其他用户权限,每组权限位又包括读、写和执行三种不同的权限。

八进制数0666表示所有者、同组用户和其他用户都具有读、写权限,没有执行权限。具体来说,它的权限位为:

  • 所有者:读、写、执行(110)
  • 同组用户:读、写、执行(110)
  • 其他用户:读、写、执行(110)

举个例子,如果我们想创建一个只有所有者有读写权限,其他用户没有任何权限的命名管道,可以使用0660作为第二个参数。代码如下:

int ret;
char *fifo = "myfifo";

// 创建命名管道
ret = mkfifo(fifo, 0660);
if (ret < 0) {
    perror("mkfifo");
    exit(1);
}

在上面的代码中,我们将第二个参数设置为0660,表示所有者有读写权限,同组用户没有任何权限,其他用户也没有任何权限。

0660的二进制是多少

0660的八进制转换成二进制是:110 110 000,即:

  • 所有者权限:110(读、写权限)
  • 同组用户权限:110(读、写权限)
  • 其他用户权限:000(无任何权限)

二进制和八进制的转换方法

二进制和八进制之间的转换方法比较简单,下面分别介绍一下。

二进制转八进制:

  1. 将二进制数从右往左每三位分成一组,不足三位的在左边补0,例如:1011011,补0后为011 011 011。
  2. 将每一组转换成对应的八进制数,例如:011转换成3,011转换成3,011转换成3,得到八进制数333。

八进制转二进制:

  1. 将每一位的八进制数转换成对应的三位二进制数,例如:3转换成011,3转换成011,3转换成011。
  2. 将每一位的三位二进制数拼接在一起,得到二进制数1011011。

举个例子,将二进制数1011011转换成八进制:

  1. 从右往左每三位分成一组,不足三位的在左边补0,得到011 011 011。
  2. 将每一组转换成对应的八进制数,得到333。

再举个例子,将八进制数0666转换成二进制:

  1. 将每一位的八进制数转换成对应的三位二进制数,得到110 110 110。
  2. 将每一位的三位二进制数拼接在一起,得到二进制数110110110。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LovG-Sco-Tec

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值