我使用匿名mmap来分配一大块内存.在这里有几个连续的页面,我想使用虚拟内存镜像变成一个环形缓冲区.
维基百科上的这个例子显示了虚拟内存镜像的含义.
假设下面的前14个区块是我巨大的块中的页面.我想将第6页和第7页虚拟地映射到另外两个连续的位置.
[0][1][2][3][4][5][6][7][8][9][10][11][12][13].......[6][7][6][7]
Run Code Online (Sandbox Code Playgroud)
迈克·阿什给出一个破败的什么我想要做的,但使用马赫特定的API.
怎么能在Linux上完成?
我hg shelve在一个存储库中使用,在那里我有一些未完成的更改,因为我需要切换到不同的头并执行无关的更改.
一旦我在另一个头上的工作被提交,我就切换回我最初使用的头部hg shelve并运行hg unshelve命令.这是结果:
$ hg unshelve
unshelving change 'default'
adding changesets
adding manifests
adding file changes
added 1 changesets with 4 changes to 4 files (+1 heads)
abort: uncommitted changes
$ hg diff
warning: ignoring unknown working parent 893e15ecb5b4!
$
Run Code Online (Sandbox Code Playgroud)
我确实hg head在unshelve命令之前和之后运行并看到相同的输出.承诺893e15ecb5b4从未存在过,我不知道Mercurial从哪里得到它.
如果它有任何相关性,我在Ubuntu 14.04上运行Mercurial版本2.8.2.
如何让我的存储库恢复工作状态,如何才能将我的搁置更改恢复?
我计划向客户发送一个"家庭服务器"类型的设备,与他们的(Android或iPhone)智能手机通信.问题在于,根据其互联网服务提供商,客户没有外部可达的IPv4地址(DS-lite隧道),因此智能手机不能仅使用IPv4 DNS记录来查找服务器.
我能想到的替代方案:
使服务器使用IPv6 DynDNS服务,并使IPv6优先于智能手机上的IPv4.由于解决方案应该在客户不必注册DynDNS服务的情况下工作,因此我没有找到允许我这样做的任何服务.
设置我自己的"目录服务器",以便主服务器按间隔注册它的序列号 - 类似于DynDNS,但在应用层上通过HTTPS.然后,客户端只需在应用程序中输入序列号即可找到服务器.由于身份验证/加密要求,此解决方案比我喜欢的更难实现.
关于如何使家庭服务器可达的任何其他想法?我真的想避免运行自己的"云服务".也许某种类型的点对点网络发现?
[更新:]这是我基本上寻找的:
Home server Relay DynDNS Client
| | | |
|-------- open tunnel to port 80 ----->| | |
|<-success, listening on 192.0.2.1:80 -| | |
| | | |
|----- Register "my.ddns.net" ---------------------->| |
|<------------ "my.ddns.net" is now 192.0.2.1 -------| |
| | | |
| |<- GET http://my.ddns.net -|
|<------- GET http://my.ddns.net ----| | |
|--- HTTP response ------------------->| | |
| |----- HTTP response ------>|
Run Code Online (Sandbox Code Playgroud) 在 Python 程序中,我的代码具有以下结构:
try:
value = my_function(*args)
finally:
with some_context_manager:
do_something()
if 'value' in locals():
do_something_else(value)
Run Code Online (Sandbox Code Playgroud)
但是'value' in locals()结构感觉有点脆弱,我想知道是否有更好的方法来做到这一点。
我真正想要的是finally根据try块是否引发异常,内部代码的行为略有不同。有没有办法知道是否引发了异常?
我有一个用 Python 编写的套接字代理,当它从一对通信对等方接收到 RST 时,它将通过让套接字被垃圾收集来关闭与两个对等方的连接。这会导致其他对等方看到 FIN 而不是 RST。
这意味着代理有效地将 RST 转换为 FIN,我认为这并不理想。
我发现在 Linux 中可以通过使用 family 地址调用 connect 来重置 TCP 连接AF_UNSPEC。但我还没有找到从 Python 程序中执行此操作的方法。
如何在 Python 中connect获取地址?AF_UNSPEC
到目前为止我已经尝试过的
我尝试查看help相关connect方法的输出并发现:
Help on built-in function connect:
connect(...)
connect(address)
Connect the socket to a remote address. For IP sockets, the address
is a pair (host, port).
Run Code Online (Sandbox Code Playgroud)
不幸的是,这并没有告诉我address为了构建AF_UNSPEC地址必须使用什么参数。
我尝试将原始套接字 fd 包装在一个新的套接字对象中,其族AF_UNSPEC如下:
socket.fromfd(s.fileno(), socket.AF_UNSPEC, 0)
Run Code Online (Sandbox Code Playgroud)
结果对象产生相同的帮助文本,并且任何调用connect新构造的套接字对象的尝试都会导致
socket.error: getsockaddrarg: …Run Code Online (Sandbox Code Playgroud) 我有这段代码在AMD64兼容CPU上运行Ubuntu 14.04时会出现段错误:
#include <inttypes.h>
#include <stdlib.h>
#include <sys/mman.h>
int main()
{
uint32_t sum = 0;
uint8_t *buffer = mmap(NULL, 1<<18, PROT_READ,
MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);
uint16_t *p = (buffer + 1);
int i;
for (i=0;i<14;++i) {
//printf("%d\n", i);
sum += p[i];
}
return sum;
}
Run Code Online (Sandbox Code Playgroud)
如果使用分配内存,则仅此段错误mmap.如果我使用malloc,堆栈上的缓冲区,或全局变量,它不会段错误.
如果我将循环的迭代次数减少到少于14的次数,则不再是段错误.如果我从循环内打印数组索引,它也不再是段错误.
为什么未对齐的内存访问能够访问未对齐地址的CPU上的段错误,为什么只有在这种特定情况下呢?
我正在开发一个django应用程序,它需要支持多种语言.此应用程序涉及一些javascript代码.在这个javascript代码中,有一些需要翻译的多行字符串.
我们尝试过这种结构:
var $text = gettext('Lorem ipsum dolor sit amet, consectetur adipisicing ' +
'elit, sed do eiusmod tempor incididunt ut labore et ' +
'dolore magna aliqua. Ut enim ad minim veniam, quis ');
Run Code Online (Sandbox Code Playgroud)
这不起作用.makemessages停在第一个+标志处,因此在.po文件中显示为:
msgid "Lorem ipsum dolor sit amet, consectetur adipisicing "
Run Code Online (Sandbox Code Playgroud)
在网上进行一些搜索会导致样式指南,它会推荐我们已经用于多行字符串的格式.但是这种风格不受支持makemessages.
我尝试删除+行尾的字符.没有+字符,makemessages可以找到完整的字符串,但它不再适用于浏览器.
是否存在多行字符串的样式,它既受到makemessages所有主要浏览器的支持,也可以在所有主流浏览器中使用?
到目前为止,我发现makemessages实际上正在做的是用双引号字符串替换所有单引号字符串,并通过xgettext声明它是C代码来运行结果.