我很难打电话给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.
我有这个代码:
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.
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代码的情况下达到相同的生锈速度?
我被困在存储阶段。它说:To use hibernation, encrypt the root volume.。但是我无法单击加密复选框,也没有找到任何加密根卷的方法。
我现在正在读一本关于 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)
没有任何嵌套元素,我不明白为什么...谢谢!
一些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.
我一直在尝试将这种特定的日期格式转换为Python中的字符串,如下所示:
datetime.strptime(‘2017-01-12T14:12:06.000-0500’,'%Y-%m-%dT%H:%M:%S.%f%Z')
Run Code Online (Sandbox Code Playgroud)
但它不起作用.
我究竟做错了什么?
rust ×4
libc ×2
python ×2
amazon-ami ×1
amazon-ec2 ×1
datetime ×1
flickr ×1
hibernation ×1
parsing ×1
python-2.7 ×1
random ×1
strptime ×1