小编Leo*_*all的帖子

为什么time.h中的time()没有syscall到sys_time?

我写了一个非常简单的程序,调用time()说明使用strace,但我遇到了问题; 这个time()电话似乎并没有真正产生一个系统调用!

我最终进入了time()GDB 的功能,现在我比以前更加困惑.从time()功能的反汇编:

0x7ffff7ffad90 <time>:  push   rbp
0x7ffff7ffad91 <time+1>:    test   rdi,rdi
0x7ffff7ffad94 <time+4>:    mov    rax,QWORD PTR [rip+0xffffffffffffd30d]        # 0x7ffff7ff80a8
0x7ffff7ffad9b <time+11>:   mov    rbp,rsp
0x7ffff7ffad9e <time+14>:   je     0x7ffff7ffada3 <time+19>
0x7ffff7ffada0 <time+16>:   mov    QWORD PTR [rdi],rax
0x7ffff7ffada3 <time+19>:   pop    rbp
0x7ffff7ffada4 <time+20>:   ret 
Run Code Online (Sandbox Code Playgroud)

如果它不调用内核,该函数如何实际获取当前时间?它的流程是:

  • 序幕
  • (0x7ffff7ffad94 + 0xffffffffffffd30d)(0x7ffff7ff80a8)中获取一些值并将其放入rax(将被返回)
  • 检查rdi(第一个参数)是否为null
  • 如果没有将值放在rax(返回值)中那么
  • 结语

这对于功能而言是有意义的time(); 如果参数为null,它只返回值,但如果不是,它也将它放在参数中.我的问题是,它在哪里得到时间价值?什么是如此神奇的地址0x7ffff7ff80a8,如何在没有系统调用的情况下做到这一点?

我正在使用GCC 6.3.0和Ubuntu GLIBC 2.24-9ubuntu2.2.

linux assembly gcc glibc x86-64

9
推荐指数
1
解决办法
155
查看次数

为什么在&mut self中允许借用struct成员,而不是self到不可变方法?

如果我有一个封装两个成员的结构,并根据另一个更新一个,只要我这样做就可以了:

struct A {
    value: i64
}

impl A {
    pub fn new() -> Self {
        A { value: 0 }
    }
    pub fn do_something(&mut self, other: &B) {
        self.value += other.value;
    }
    pub fn value(&self) -> i64 {
        self.value
    }
}

struct B {
    pub value: i64
}

struct State {
    a: A,
    b: B
}

impl State {
    pub fn new() -> Self {
        State {
            a: A::new(),
            b: B { value: 1 }
        }
    }
    pub fn …
Run Code Online (Sandbox Code Playgroud)

rust memory-safety borrow-checker

7
推荐指数
1
解决办法
427
查看次数

Python中的枚举枚举?

是否可以在Python中使用enum枚举?例如,我想拥有

enumA
    enumB
        elementA
        elementB
    enumC
        elementC
        elementD
Run Code Online (Sandbox Code Playgroud)

并且对我来说可以elementA称为enumA.enumB.elementA,或elementD称为enumA.enumC.elementD.

这可能吗?如果是这样,怎么样?

编辑:以天真的方式实施:

from enum import Enum

class EnumA(Enum):
    class EnumB(Enum):
        member = 0

print(EnumA)
print(EnumA.EnumB.member)
Run Code Online (Sandbox Code Playgroud)

它给:

<enum 'EnumA'>
Traceback (most recent call last):
  File "Maps.py", line 15, in <module>
    print(EnumA.EnumB.member)
AttributeError: 'EnumA' object has no attribute 'member'
Run Code Online (Sandbox Code Playgroud)

python enums python-3.x

6
推荐指数
3
解决办法
4270
查看次数

ARM 是否有类似于 x86 上的 VESA/VGA 文本模式控制台的机制?

在 x86 中,在对 VGA 设备进行一些设置后,内核可以写入 0xB8000 并在屏幕上显示 ASCII 字符。内核是否有类似的标准机制在启动期间显示消息?如果不是,芯片制造商是否倾向于为此创建自己的机制,或者外部串行到视频设备(FPGA 或到 PC 的串行链路)是否是更好的选择?

operating-system kernel arm

5
推荐指数
0
解决办法
850
查看次数

使用 &lt;pre&gt;&lt;code&gt; 标签隐藏/删除 html 代码段的第一个换行符/空白行

我正在一个有一些代码的网站上工作,我想写:

<pre><code>
line 1
line 2
</code></pre>
Run Code Online (Sandbox Code Playgroud)

但这会在开头产生一个空行作为输出

[A Blank line in here that I don't want]    
line 1
line 2
Run Code Online (Sandbox Code Playgroud)

我知道如果我这样写就不会有空行,但我喜欢像上面那样写。

<pre><code>line 1
line 2
</code></pre>
Run Code Online (Sandbox Code Playgroud)

请建议我可以做什么,如果可能的话,用 CSS 隐藏或删除第一个换行符/空白行,以便我可以在我的代码中保留换行符,而不会在我的所有代码部分的开头出现空行。

html css newline pre blank-line

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

Python 3:带分隔符的str.join()

我有一些基本上是这样的代码:

data = ["some", "data", "lots", "of", "strings"]
separator = "."

output_string = ""
for datum in data:
    output_string += datum + separator
Run Code Online (Sandbox Code Playgroud)

我怎么能用这个str.join()或类似的built-in 功能呢?(或者不可能吗?)

python string list python-3.x

1
推荐指数
2
解决办法
6724
查看次数

Into&lt;Iterator&gt; 与在线算法的迭代器

我正在编写一个在线算法,用一系列函数实现,这些函数采用迭代器并产生迭代器。

当我像这样编写函数时(内容更复杂但在类型方面没有区别):

fn decode<'a, T>(input: T) -> impl Iterator<Item = i16> + 'a
where
    T: Iterator<Item = &'a u8> + 'a,
{
    input.map(|b| i16::from(*b)).filter(|i| *i != 0)
}
Run Code Online (Sandbox Code Playgroud)

看到操场

但是,这使得调用函数不符合人体工学:

let input: Vec<u8> = vec![1, 2, 3, 0];
let v: Vec<i16> = decode(input.iter()).collect();
Run Code Online (Sandbox Code Playgroud)

我更喜欢使用T: Into<Iterator<...,但我不能。当我这样写签名时:

fn decode<'a, T>(input: T) -> impl Iterator<Item = i16> + 'a
where
    T: Into<Iterator<Item = &'a u8>> + 'a,
Run Code Online (Sandbox Code Playgroud)

操场

我收到一个错误,说在编译时不知道返回类型的大小:

fn decode<'a, T>(input: T) -> impl Iterator<Item = i16> + …
Run Code Online (Sandbox Code Playgroud)

types iterator rust

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

React JS FormControl 事件的类型安全 onChange

我有一个处理不断变化的文本字段的函数:

private handleNameChange(e: React.FormEvent<FormControl>) {
    const name = e.target.value;
    this.setState({ name });
    this.props.editGroupName(name);
}
Run Code Online (Sandbox Code Playgroud)

这连接到 FormControl 的 onChange:

<FormControl type='text' placeholder='Name' value={this.state.name} onChange={this.handleNameChange} />
Run Code Online (Sandbox Code Playgroud)

然而,根据 TypeScript 的说法,这是错误的:

TS2339: Property 'value' does not exist on type 'EventTarget'.
Run Code Online (Sandbox Code Playgroud)

我也尝试过使用currentTarget. 我怎么解决这个问题?

types typescript reactjs

0
推荐指数
1
解决办法
1334
查看次数