小编kas*_*erd的帖子

Linux上的环形缓冲区的内存镜像

我使用匿名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上完成?

linux circular-buffer virtual-memory

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

如何修复由hg取消搁置的存储库?

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 headunshelve命令之前和之后运行并看到相同的输出.承诺893e15ecb5b4从未存在过,我不知道Mercurial从哪里得到它.

如果它有任何相关性,我在Ubuntu 14.04上运行Mercurial版本2.8.2.

如何让我的存储库恢复工作状态,如何才能将我的搁置更改恢复?

mercurial unshelve

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

使家庭服务器可访问(IPv4,IPv6,DS-Lite)

我计划向客户发送一个"家庭服务器"类型的设备,与他们的(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)

networking ipv4 ipv6 dyndns

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

finally 块可以知道是否有异常

在 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 exception try-finally

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

如何在 Python 中重置 TCP 套接字?

我有一个用 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)

python sockets linux tcp

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

为什么在AMD64上对mmap内存的未对齐访问有时会出现段错误?

我有这段代码在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上的段错误,为什么只有在这种特定情况下呢?

c gcc mmap x86-64 auto-vectorization

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

使用django在javascript中翻译多行字符串

我正在开发一个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代码来运行结果.

javascript django gettext

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