擅长:python、mysql、java
<p>运行char*得到的数字不能保证是任何特定的数字。宏在计算<code>keys</code>的IOR时将字符串的地址视为整数。结果将根据<code>keys</code>在堆栈中的位置而变化。因此,在Python中没有一个很好的替代品来替代这个功能。在</p>
<p>从<a href="http://h30097.www3.hp.com/docs/dev_doc/DOCUMENTATION/HTML/DDK_R2/DOCS/HTML/MAN/MAN9/0028___R.HTM" rel="nofollow">docs for _IOR(g, n, t)</a>:</p>
<blockquote>
<p>g<br/>
Specifies the group that this ioctl type belongs to. This argument must
be a nonnegative 8-bit number (that is, in the range 0-255 inclusive).
You can pass the value zero (0) to this argument if a new ioctl group
is not being defined.</p>
</blockquote>
<p>函数的预期用途是将一个字节作为第一个参数(通过字符或整数类型)。也就是说,“钥匙”可能是被分配给某个随机组的。我会选择一个您认为不会被占用的组(或者在您的C代码中查找它当前分配给的组并使用该编号)来代替<code>keys</code>。在</p>
<p>或者,您可以始终只取输入字符串的第一个字符,并将其视为组id</p>
<pre><code>def _IOR(group, number, size):
if isinstance(group, basestring):
group = ord(group[0]) if group else 0
return _IOC(_IOC_READ, group, number, size)
</code></pre>
<p>那么<code>_IOR('t', 3, 1)</code>和{<cd5>}仍将运行,尽管组分配与C宏不同。但由于宏被错误地用于<code>keys</code>赋值,我认为这不会是个问题。在</p>