问题标签 [mknod]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1550 浏览

c - 函数“mknod”的隐式声明,但我包含了标题

我正在尝试制作一个使用命名管道与 Raspberry Pi 3 上的 C++ 程序进行通信的 C 程序。

当我编译我的一些代码时,GCC 吐出的警告:

/home/pi/BluetoothTest/btooth.c|76|warning: implicit declaration of function ‘mknod’ [-Wimplicit-function-declaration]|

这是该函数的代码,包括它上面的#if:

以下是我在文件中包含的内容:

程序尝试在此处创建管道:

fifo 是int不在其他任何地方使用的,而 fp 是FILE*管道的。我所做的一些调试表明,运行后fifo的值可能是因为编译器似乎无法找到该函数的实现。-1mknod

如何让 GCC 知道在哪里可以找到 的实现mknod

0 投票
1 回答
621 浏览

docker - dockers/IBM bluemix 中的 openconnect(错误:TUNSETIFF 失败:设备的 ioctl 不合适)

我已经基于 Ubuntu 14.04 创建了自己的容器映像,并使用 apt-get 安装了 openconnect。我可以ping google,并访问我在我期望的端口上运行的应用程序。

现在我正在尝试从容器到本地数据库的 VPN 连接。我首先在我的 Ubuntu 14.04 虚拟机中尝试过,没有问题。详情见下文。我现在尝试在容器中做同样的事情,但得到以下错误(完整日志见下文):
TUNSETIFF failed: Inappropriate ioctl for device

我发现的东西:
来源:https
://serverfault.com/questions/379710/openvpn-setup-service-wont-start “你有什么类型的 VPS?你可能需要你的供应商在主机节点。”
-> 鉴于它在我的笔记本电脑上以完全相同的方式工作,我假设它已在主机上启用。
来源:https
://groups.google.com/forum/#!topic/ docker-user/2jFeDGJj36E 我有 tun 设备吗?
-> 它具有所有适当的权利
来源:https
://serverfault.com/questions/680721/how-to-create-dev-tun-device-inside-unprivileged-lxc-container 和
来源:https:// hub.docker.com/r/dperson/openvpn-client/
也许我应该添加一些标志?

我还尝试不使用 cap-drop,不使用 --device,使用 --cap-add ALL,使用 cap-add SYS_NET_ADMIN,结果相同,1 个额外的错误行:
mknod: '/dev/net/tun': Operation not允许
的 TUNSETIFF 失败:Bluemix 中不允许设备的不适当 ioctl 使用 --privileged 运行

任何人任何指针?是否还应提供其他信息?谢谢!

成功

从容器

0 投票
1 回答
795 浏览

c - 在linux中重新启动后字符设备文件不存在

我刚刚开始探索 Linux 字符设备驱动程序。我制作了一个简单的内核模块,我在其中使用 register_chrdev() 函数注册设备。我已将 0 作为参数传递给函数,内核返回给我可用的免费主号码。之后,我使用 mknod 命令创建带有返回的主编号的字符设备文件,并且我成功地做到了。我已经将驱动程序加载到内核中,驱动程序、设备文件和用户空间应用程序之间的通信很好。

问题是当我重新启动系统时,/dev 目录中没有字符设备文件(使用 mknod 创建)。

所以请提出这个问题的解决方案,以便我的字符设备文件即使在重新启动后也会出现在 /dev 目录中。

0 投票
1 回答
897 浏览

c - 控制mplayer的C程序

我必须在 linux 上用 C 语言编写程序,可以使用 mknod() 函数控制 mplayer。

当我通过这个命令运行 mplayer

我想用我的 C 程序来控制它,就像使用 echo 函数一样

这是我的代码:

问题是,它只工作一次。例如,我不能暂停然后取消暂停电影。

0 投票
1 回答
1455 浏览

linux-kernel - 设备驱动程序节点特定的私有数据

我想为每个节点(/dev/foo[1-99])存储一个特定的数据,因为我想将每个节点映射到一个特定的硬件。

我开始使用,file->private_data但每次调用 open 都将其设置为NULL.

是否有类似的东西可以在open()通话之间持续存在?

0 投票
1 回答
326 浏览

linux-kernel - 如何从用户空间访问动态字符设备?

register_chrdev()内核中的函数注册一个字符设备:

如果major0内核动态分配一个主编号并且寄存器函数返回它。

现在,让我们假设一个模块foo.ko想要使用/dev/foo动态主号码。用户空间如何知道要传递给哪个主编号来 mknod创建/dev/foo

0 投票
0 回答
65 浏览

linux - init 模块不会在内部创建设备文件

我是 linux 设备驱动程序编程的新手,所以我的问题可能有点幼稚。

这在 char 设备的范围内,但可能也与其他情况有关(??)。

到目前为止,据我所知,在模块的 __init 方法中,必须进行模块的所有必要初始化,并且一旦此函数完成 - 模块应该能够处理它从内核和/或用户空间应用程序获得的任何请求. 此外,作为 __init 方法的一部分,我们的模块需要获取一个主编号(假设我们动态分配它),然后在 /dev 目录下创建“相应的”设备文件。有几种方法可以做到这一点。

1)驱动本身可以打印新分配的编号,我们可以手工制作设备文件。

2) 新注册的设备在/proc/devices中会有一个入口,我们可以手工制作设备文件,也可以编写一个shell脚本来读取文件并制作设备文件。

3) 我们可以让我们的驱动程序在成功注册后使用 mknod 系统调用生成设备文件,并在调用 cleanup_module 期间使用 rm。

现在据我所知,除非 __init 方法中有一些代码在我们创建设备文件之前“暂停” __init 方法的终止 --> 这意味着我们的模块可能会在没有设备的情况下开始接收请求文件准备好了,这不是问题吗(假设我们采用第一种或第二种方法)?

如果我没有提到它们,请随意注意一些其他要考虑的点。谢谢,

家伙。

0 投票
1 回答
602 浏览

python - os.mknod 返回 [error38] 函数未在 google colab 中实现

我正在尝试在 google colab 上运行以下代码。

但我收到错误[Errno 38] 功能未实现

任何人都可以帮助解决它吗?

0 投票
0 回答
115 浏览

process - 在单个程序中通过 fifo 进程发送字符串

我有这个 fifo 示例,其中子进程向父进程发送一个整数。我希望它改为发送一个字符串,但它不起作用。

}

我在 'ret=fscanf(pfp,"%s", value);' 处收到错误,说 %s 需要 char 但 value 是 int 类型,即使它不是。它被声明为char。

我错过了什么?我只是想向父母发送一个字符串并在那里打印。

0 投票
2 回答
7478 浏览

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

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

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

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

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

我相信这里的关键是从一个docker build步骤中创建一个文件系统节点?这可能吗?