Vij*_*jay 0 c printf linux-device-driver
我的代码中有如下内容:这是在 linux 下创建设备的代码 /dev
#define PRINTER_STR "printer_"
char str[32];
snprintf(str, sizeof(str), PRINTER_STR "%s%s", dev->type, "%u");
device_create(mycan_drv.class, parent,
MKDEV(dev->nMajor, dev->nMinor),
dev, str, dev->nMinor);
Run Code Online (Sandbox Code Playgroud)
第四参数snprintf被dev->type分配有像琴弦epson,hp,canon。
实现的输出是这样的:
printer_epson32, printer_hp33,printer_canon34
在上面的输出字符串中,我无法理解像32, 33, 之类的数字是如何34构建的。我可以理解这是因为第 5 个参数"%u"传递给snprintf. 但是怎么样?
我得到的所有参考文献都包含最多 3 个或 4 个snprintf. 请帮忙。
char str[32];
dev->type = "epson";
snprintf(str, sizeof(str), "printer_" "%s%s", dev->type, "%u");
Run Code Online (Sandbox Code Playgroud)
结果是:
str = "printer_epson%u".
Run Code Online (Sandbox Code Playgroud)
然后代码执行:
device_create(..., str, dev->nMinor);
Run Code Online (Sandbox Code Playgroud)
这真的是:
device_create(..., "printer_epson%u", dev->nMinor);
Run Code Online (Sandbox Code Playgroud)
然后在device_create一个*printf类似的函数中再次被调用,它dev->nMinor代替%u. 所以,就像,不是snprintf写数字,数字是写在里面device_create。snprintf用于为该数字创建格式字符串device_create并device_create写入该数字。
旁注:"%s%s", dev->type, "%u")看起来很奇怪,可能只是"%s%%u", dev->type);. 无论如何,它本来可以device_create(...., "%s%u", dev->type, dev->nMinor)。