标签: mknod

如何从Linux内核模块的init_module代码创建设备节点?

我正在为linux内核编写一个模块,我想在init函数中创建一些设备节点

int init_module(void)
{
    Major = register_chrdev(0, DEVICE_NAME, &fops);
 // Now I want to create device nodes with the returned major number
}
Run Code Online (Sandbox Code Playgroud)

我还希望内核为我的第一个节点分配一个次要编号,然后我将自己分配其他节点的次要编号.

我怎么能在代码中执行此操作.我不想使用mknod从shell创建设备

linux linux-kernel mknod

45
推荐指数
3
解决办法
5万
查看次数

与`mknod`相反的是什么?

我正在学习从内核模块编程指南编写字符设备驱动程序,并用于mknod创建一个节点/dev以与我的驱动程序通信.

但是,在检查联机帮助页并观察这rmnod是一个不存在的命令之后,我找不到任何明显的删除方法.

什么是扭转效果mknod并正确删除创建的节点的正确方法/dev

command-line kernel-module linux-device-driver linux-kernel mknod

35
推荐指数
1
解决办法
2万
查看次数

Python模块'os'没有属性'mknod'

我想在Python中创建一个新文件,因为我正在使用mknod命令,但是得到错误:

os.mknod();
AttributeError: module 'os' has no attribute 'mknod'
Run Code Online (Sandbox Code Playgroud)

我正在使用除'mknod'工作之外的窗口和属性.

python operating-system module mknod python-3.x

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

如何在 Docker 容器镜像中创建 tun 接口?

我正在尝试使用/dev/net/tun设备创建 Docker 映像,以便可以在 Linux、Mac 和 Windows 主机上使用该映像。设备不需要访问主机的网络接口。

请注意,传递--device /dev/net/tun:/dev/net/tuntodocker run是不可取的,因为这仅适用于 Linux。

容器启动后,我可以通过运行手动添加设备:

$ sudo mkdir /dev/net
$ sudo mknod /dev/net/tun c 10 200
$ sudo ip tuntap add mode tap tap
Run Code Online (Sandbox Code Playgroud)

但是当我将这些行添加到 Dockerfile 时,它​​会导致错误:

Step 35/46 : RUN mkdir /dev/net
 ---> Running in 5475f2e4b778
Removing intermediate container 5475f2e4b778
 ---> c6f8e2998e1a
Step 36/46 : RUN mknod /dev/net/tun c 10 200
 ---> Running in fdb0ed813cdb
mknod: /dev/net/tun: No such file or directory
The command '/bin/sh -c …
Run Code Online (Sandbox Code Playgroud)

mknod tun docker dockerfile

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

C:使用 mknod() 创建命名管道不起作用

语言:C 操作系统:Ubuntu

我只是尝试使用以下命令创建一个名为管道的 FIFO:

state = mknod("pipe.txt", S_IFIFO | 0666, 0);
Run Code Online (Sandbox Code Playgroud)

问题是我总是让状态的值为 -1(意味着它失败了)而不是 0。

perror 返回“pipe.txt:文件存在”

我不知道我应该如何调试这样的问题或可能是什么原因,希望任何人代码指导我出了什么问题。

(注意:文件 pipe.txt 与源文件位于同一路径。)

c pipe mknod

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

如何编写一个 bash 脚本来获取 /dev/random 的次要和主要设备号

我正在尝试在 chroot 环境中运行一个程序,它需要/dev/random作为资源。手动我可以做ls -l,然后用 再次创建文件mknod c xx yy,但我需要让它自动,我不认为这些版本号从一个 linux 版本到另一个是不变的,所以这就是为什么我有以下问题:

我如何编写一个 bash 脚本来提取次要和主要数字/dev/random并将其与 mknod 一起使用?我可以使用,ls -l但我不知道如何提取它的子字符串...

的确切返回ls -l /dev/random是:

crw-rw-rw- 1 root root MINOR, MAJOR mars  30 19:15 /dev/random
Run Code Online (Sandbox Code Playgroud)

我想提取的两个数字是 MINOR 和 MAJOR。但是,如果有一种更简单的方法可以在没有 ls 和 mknod 的情况下创建节点,我将不胜感激。

linux bash mknod

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

通过FIFO重定向stdin

我在GNU/Linux下运行一个服务器应用程序(用Java编写),它接受输入(来自stdin,我猜)并解释它运行一些命令.我不想在终端窗口中运行应用程序(我想运行一个守护进程),但我仍然希望能够随时输入命令.我以为我可以用fifos做到这一点,所以我用mknod创建它.问题是cat fifofile> java ...cat fifofile | java ...由于某种原因失败并显示"找不到文件"错误.

仅使用cat进行读写,fifo可以完美地工作.

有没有办法解决这个问题,或者以其他方式实现同​​样的目标?

linux shell stdin fifo mknod

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

为什么不使用fread读取目录文件?

我正在通过莫里斯巴赫的Unix书中的一个例子.他写了一个简单的复制程序,如下所述.但是,当inputfile是目录文件时,它会失败.我偶然发现了opendir其他一些这样的API - 我应该使用它吗?

如果二进制文件可以使用它,为什么目录文件被认为是不同的?在Unix中,并不是所有被抽象为文件的内容,无论程序如何解释它.

另外,我如何扩展此程序以支持目录文件,然后创建一个mknod?我想测试一下,假设我在/home/user1 并且做了一个$./copy /home/user user-home-clone,mknod看看该目录将如何与家庭不同.我想user-home-clone可能没有对自身的引用,但是/home/user[尽管它会在/ home/user中存在一个名为user-home-clone的文件] 所有其他文件,因为当我们做副本时它不存在命令?

#include <stdlib.h>
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>

char buffer[2048];

int copy(FILE *source, FILE *destination)
{
    int count;
    while ((count = fread(buffer, 1, sizeof buffer , source)) > 0)
    {
        fwrite(buffer, 1, count, destination);
    }
    return 0;
}

int main(int argc, char* argv[])
{
    int status;
    FILE *source;
    FILE *destination;

    if (argc != 3)
    {
        printf("%s takes exactly 3 …
Run Code Online (Sandbox Code Playgroud)

c directory file mknod

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

使用mknod()创建目录

我需要创建一个目录mknod()(mkdir()在我的例子中使用is not),我会从某个目录调用该程序,并引入在前一个目录中创建新目录的路径.

例如:如果我/home/user/test/和里面test/level1/,我想在level2里面创建目录level1,所以我会传递参数/level1/level2/

我有以下代码在我创建管道时有效,但是当我将模式更改为时S_IFDIR,它不会执行任何操作.

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

void main(int argc,char *argv[]){
    int status;
    if ((status  = mknod(argv[1], S_IFDIR,0)) == 1){
        printf("error\n" );
    }
    exit(0);

}
Run Code Online (Sandbox Code Playgroud)

c directory mknod

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

是mknod便携式?如果没有,有什么替代方案?

我想mknod在我的代码中使用来创建一个文件,但是man

mknod()的唯一可移植用途是创建FIFO特殊文件.如果mode不是S_IFIFO或dev不为0,则mknod()的行为未指定.

这是否意味着,mknod不是真正可移植的,我应该用其他方式来创建一个函数?如何打电话open和即时close?哪种方式更安全?

c posix mknod

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