小编han*_*ast的帖子

Rust中的libc :: stat中的文件参数

我很难打电话给libc::statRust.我有这个:

extern crate libc;
use std::fs::File;
use std::os::unix::prelude::*;
use std::path::Path;

fn main() {
    let p = Path::new("/");
    let f = File::open(&p).unwrap();
    let fd = f.as_raw_fd() as i8;

    unsafe {
        let mut stat: libc::stat = std::mem::zeroed();
        if libc::stat(fd, &mut stat) >= 0 {
            println!("{}", stat.st_blksize);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但现在我收到这个错误: error: mismatched types: expected *const i8, found i8

我找不到关于第一个参数如何工作的任何文档.从类型(i8)来看,我认为它必须是文件描述符.

背景:我正在阅读"UNIX环境中的高级编程",并希望在Rust中进行一些练习而不是C.

libc rust

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

我可以将变量assignent与if结合使用吗?

我有这个代码:

let fd = libc::creat(path, FILE_MODE);
if fd < 0 {
    /* error */
}
Run Code Online (Sandbox Code Playgroud)

C中的等价物更短:

if ((fd = creat(path, FILE_MODE)) < 0) {
    /* error */
}
Run Code Online (Sandbox Code Playgroud)

我可以在Rust做类似的事吗?我试图将它映射到if let但它看起来像处理Options.

rust

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

生成随机数的最快方法

libc有random哪些

使用非线性附加反馈随机数发生器,采用大小为31的长整数的默认表来返回连续的伪随机数

我正在寻找一个用Rust编写的随机函数,速度相同.它不需要加密安全,伪随机就足够了.

仔细观察rand crate它似乎XorShiftRng最适合这种需求:

Xorshift算法不适用于加密目的,但速度非常快

当我像这样使用它时:

extern crate time;
use rand::Rng;

let mut rng = rand::XorShiftRng::new_unseeded();
rng.next_u64();
Run Code Online (Sandbox Code Playgroud)

它比libc随机慢约33%.(产生8'000'000个随机数的样本代码).

最后,我需要i64随机数,所以当我运行时,rng.gen()它已经比libc随机慢100%.当铸造时rng.next_u64() as i64,则慢60%.

有没有办法在不使用任何unsafe代码的情况下达到相同的生锈速度?

random libc rust

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

如何创建可以休眠的 ec2 实例?

我被困在存储阶段。它说:To use hibernation, encrypt the root volume.。但是我无法单击加密复选框,也没有找到任何加密根卷的方法。

amazon-ec2 hibernation amazon-ami

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

Beautifulsoup 返回不完整的 html

我现在正在读一本关于 Python 的书。有一个家庭作业的小项目:“编写一个程序,访问 Flickr 或 Imgur 等照片共享网站,搜索一类照片,然后下载所有生成的图像。” 建议只使用 webbrowser、requests 和 bs4 库。

我不能为 Flickr 做这件事。我发现解析器不能进入元素内部(div class="interaction-view")。在 Chrome 中使用“Inspect element”我可以看到里面有一些“div”元素和“a”元素。但是,当我使用 bs4 库时,它看不到它。

我的代码是这样的:

#!/usr/bin/env python3
# To download photos from Flickr

import requests, bs4

search_name = "spam"
website_name = requests.get('https://www.flickr.com/search/?text='
                       + search_name)
website_name.raise_for_status()
parse_obj = bs4.BeautifulSoup(website_name.text, "html.parser")
elements = parse_obj.select('body #content main .main.search-photos-results \
                .view.photo-list-view.requiredToShowOnServer \
                .view.photo-list-photo-view.requiredToShowOnServer.awake \
                .interaction-view')
print(elements)
Run Code Online (Sandbox Code Playgroud)

它只打印:

[<div class="interaction-view"></div>, <div class="interaction-view"></div>...]
Run Code Online (Sandbox Code Playgroud)

没有任何嵌套元素,我不明白为什么...谢谢!

python parsing flickr beautifulsoup

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

声明未初始化变量的更好方法

一些libc函数,例如,sigemptyset(set: *mut sigset_t)获取指向变量的指针,将其视为未初始化并初始化它.

我最终得到这个代码:

let mut newmask = std::mem::uninitialized();
libc::sigemptyset(&mut newmask);
Run Code Online (Sandbox Code Playgroud)

这没关系,但是当我有很多这些变量时,我最终会得到这样的结果:

let mut newmask = std::mem::uninitialized();
let mut oldmask = std::mem::uninitialized();
let mut pendmask = std::mem::uninitialized();
Run Code Online (Sandbox Code Playgroud)

我可以压缩它:

use std::mem::unitialized as uninit;
let (mut newmask, mut oldmask, mut pendmask) = (uninit(), uninit(), uninit());
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来编写这段代码?出于教育目的,我明确地想要使用libc.

initialization rust

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

datetime.strptime( '2017-01-12T14:12:06.000-0500', '%Y-%间 - %的dT%H:%M:%S%F%Z')

我一直在尝试将这种特定的日期格式转换为Python中的字符串,如下所示:

datetime.strptime(‘2017-01-12T14:12:06.000-0500’,'%Y-%m-%dT%H:%M:%S.%f%Z')
Run Code Online (Sandbox Code Playgroud)

但它不起作用.

我究竟做错了什么?

python datetime strptime python-2.7 python-datetime

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