草庐IT

c - 如何在 Linux 中使用 ioctl(原始分区)正确刷新磁盘缓存

我正在尝试使用ioctl来确保直接写入卷的更改正在写入磁盘。fsync()显然在原始分区中不可用。sync()也是一个糟糕的解决方案(为了刷新64MB,我需要整个生命周期来同步等待)所以..这就是我正在尝试做的-获取errno25。/dev/sda3是ssd驱动器上的原始未挂载分区open(_fd,"/dev/sda3",...)pwritev(_fd,...)ioctl(_fd,BLKFLSBUF,0)Ubuntu14.04,c注意:hdparm-W0/dev/sda3失败:设备的ioctl不合适。如何找到适合我的ssd的刷新方法? 最佳答案

c - Linux 输入设备读取 ioctl(EVIOCGKEY()) 与 read(input_event)

我所有的代码都基于linuxjournal.com上的一篇文章hereisthearticleIbasedmycodeon我正在编写一个嵌入式应用程序,我正在尝试从键盘读取击键。这是我正在使用的代码uint8_tkey_b[KEY_MAX/8+1];memset(key_b,0,sizeof(key_b));ioctl(fd,EVIOCGKEY(sizeof(key_b)),key_b);for(yalv=0;yalv除了我按“a”时,此代码大部分都有效。根据input.h,KEY_A设置为值30。但是当我在键盘上按“a”时,它返回值102而不是30。我已经测试了键盘上的其他键,并且看

c - Linux 内核模块 - IOCTL 使用返回 ENOTTY

我正在研究小内核模块。我正在尝试使用IOCTL(在ioctl_add中),但是当我调用它时我得到了ENOTTY,这是在main底部的开关中检查的。代码如下。有谁知道我做错了什么吗?用户.c:#include#include#include#include#include#include#include#include#include#include#include#include#defineIOCTL_TYPE(100)#defineIOCTL_ADD(_IO(IOCTL_TYPE,1))voidcleanup(){if(f>=0){close(f);}}intioctl_add(i

c++ - 将 ioctl() 调用从 unix 移植到 linux,FIONBIO 出错

我想使用ioctl()来获取准备读取的字节数我的做法是:mysocket=socket(....);ioctl(mysocket,FIONBIO,&zero);connect(.....);ioctl(mysocket,FIONREAD,&numBytes);read(mysocket,buffer,numBytes);这在unix中运行良好,现在我必须将它移植到linux我不断收到错误error:'FIONBIO'wasnotdeclaredinthisscope是否有一些特定于linux的头文件?或者“FIOBIO”在Linux中根本不起作用?我包含以下header:#includ

对 ioctl() 和内核头文件的混淆

据我所知,ioctl()用于向用户空间应用程序公开“扩展”系统调用接口(interface)。ioctl()不是添加数千个特定驱动程序独有的系统调用,而是用于通过单个系统调用提供可扩展的特定于驱动程序的功能。这似乎很清楚。但是,我正在尝试编译我的第一个使用ioctl()调用的应用程序,我开始怀疑我的理解。具体来说,我想调用ioctl()来“清理”eMMC设备。看看/usr/include/linux/mmc/ioctl.h(或在include/uapi/linux/mmc/ioctl.h的内核源代码中),我可以看到这个结构:structmmc_ioc_cmd{//Mostfieldso

linux - ioctl 命令的用户权限检查

我正在实现char驱动程序(Linux),我的驱动程序中有某些IOCTL命令,这些命令只能由ADMIN执行。我的问题是如何在我的ioctl命令实现下检查用户权限并限制非特权用户访问IOCTL。 最佳答案 您可以使用boolcapable(intcap)函数,如果用户请求了能力,该函数返回true。cap的可能值列在include/uapi/linux/capability.h的内核源代码中(宏以CAP_开头)。如您所见,有许多类似管理员的功能。选择一个似乎更适合你的任务。或者只获取CAP_SYS_ADMIN。

linux - 列出从用户空间到内核空间的 ioctl 调用

可能是我的问题听起来更天真。但我想知道是否可以列出Linux中从用户空间到内核空间的ioctl调用。 最佳答案 使用LTTng.如果您使用的是Ubuntu、Fedora、ArchLinux、Debian或openSUSE,这是一个现代Linux内核跟踪器(也适用于用户领域),可在几秒钟内安装(作为软件包提供)。不然还是容易gettingthetarballs并遵循安装程序。追踪您创建这样的跟踪:$sudolttngcreatemySessionSessionmySessioncreated.Traceswillbewrittenin

linux - 尝试 SSH 时设备的 ioctl 不合适

我正在尝试通过SSH连接几台服务器并尝试获取每台服务器的sudo-l输出。下面是我正在执行的脚本#!/bin/bashserverlist="/tmp/servers"whileIFS=,read-rservernetgroupusernameuserdossh-tt-qroot@$serversudo-U$username-l我发现此脚本中的-tt选项是导致此错误的原因。有什么想法吗?我还注意到,当我仅为1个服务器执行以下命令时,我没有看到此错误。ssh-tt-qroot@myserversudo-Ucham01-l下面是我收到的完整错误消息:tcgetattr:设备的不适当ioct

c - 为什么ioctl返回 "bad address"

我使用下面的代码从嵌入式板的SPI端口输出数据(olimeximx233-micro——这不是特定于板的问题)。当我运行代码时ioctl返回“错误地址”。我正在修改http://twilight.ponies.cz/spi-test.c上的代码效果很好。谁能告诉我我做错了什么?root@ubuntu:/home#gcctest.c-otesttest.c:20:warning:conflictingtypesfor‘msg_send’test.c:16:note:previousimplicitdeclarationof‘msg_send’washereroot@ubuntu:/hom

linux - 在弄清楚如何使用 ioctl/SIOCGIFADDR/SIOCGIFCONF 在 Mac OS X 上获取以太网接口(interface)信息时遇到问题?

您是否在弄清楚如何使用ioctl/SIOCGIFADDR/SIOCGIFCONF在MacOSX上获取界面信息时遇到问题?今天,我很难让在Linux上运行良好的代码在MacOSX上运行。 最佳答案 复制粘贴到main.c和gccmain.c&&./a.out应该可以工作(列出所有网络接口(interface)、它们的ipv4/6地址、网络掩码和MAC地址(如果关联):在MacOSX和iOSiPad/iPhone上运行良好:#include#include#include#include#include#include#include#