小编Dan*_*att的帖子

C中的联合使用是否有效/合规?

鉴于这些结构:

typedef struct {
    //[...]
} StructA;

typedef struct {
    StructA a;
    //[...]
} StructB;

typedef union {
    StructA a;
    StructB b;
} Union;
Run Code Online (Sandbox Code Playgroud)

以下两种访问方法是否等效且未定义?

Union u;
memcpy(&u.b, /*...*/); //Pretend I populated StructB here
u.a;    // Method 1
u.b.a;  // Method 2
Run Code Online (Sandbox Code Playgroud)

请注意,StructA恰好是StructB的第一个成员.

我在一个有效的代码库中发现了这一点,我只是想知道它是否是标准的,或者是否存在任何对齐问题.

c struct unions

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

是否可以从内核模块中向 USB 设备发送 SCSI 命令?

给定 udev 传递给我的内核模块(可能是块设备路径)的信息,我如何将 SCSI 命令发送到块设备?(但让它正常运行,否则意味着分区已安装,没有数据丢失等)

我想做什么

我有一个 USB 大容量存储设备,它带有通过 SCSI 命令控制的 LED。我想编写一个 LED 驱动程序来为其提供 /sys/class/leds/* 条目。

这里的目标是让设备正常运行(安装和运行分区等),但也允许 /sys/class/leds/* 交互,发送 SCSI 命令来控制 LED。

使用 sg_raw 在用户空间发送我需要的 SCSI 命令很容易。但是我需要一个 kmod 来提供 /sys/class/leds/...

基本上我需要的是ioctl()。但是,我知道从 kmod 中调用 open()、ioct() 等通常是一个坏主意。

linux scsi kernel-module linux-device-driver usb-mass-storage

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