小编Per*_*ner的帖子

表示稀疏整数集?

什么是以紧凑和快速的方式表示稀疏整数集(真正的C内存地址)的好方法.我已经知道像位向量和行程编码这样的显而易见的事情了.但我想要比每组元素一个词更紧凑的东西.我需要添加和删除元素并测试成员资格.我不需要其他的集合操作,比如union.

多年前我读过一个这样的图书馆,但后来忘记了它的名字.我认为它是由HP发布的,并且有一个女人的名字.

algorithm set

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

在shell/bash中连接两个命令之间的输入_and_output

我有两个(UNIX)程序A和B,它们从stdin/stdout读取和写入.

我的第一个问题是如何A的标准输出连接到B的标准输入 B的AIE,像A的标准输入标准输出| B但是双向管道.我怀疑我可以通过使用exec重定向来解决这个问题,但我无法让它工作.程序是交互式的,因此临时文件不起作用.

第二个问题是我想复制每个方向并通过日志记录程序将副本传递给stdout,以便我可以看到在程序之间传递的(基于文本行的)流量.如果我能解决第一个问题,我可以在这里使用tee>(...).

这两个问题似乎都应该是众所周知的解决方案,但我无法找到任何东西.

我更喜欢POSIX shell解决方案,或者至少在cygwin上使用bash工作的东西.

感谢您的回答,我提出了以下解决方案.A/B命令使用nc来侦听两个端口.日志记录程序使用sed(使用-u进行无缓冲处理).

bash-3.2$ fifodir=$(mktemp -d)
bash-3.2$ mkfifo "$fifodir/echoAtoB"
bash-3.2$ mkfifo "$fifodir/echoBtoA"
bash-3.2$ sed -u 's/^/A->B: /' "$fifodir/echoAtoB" &
bash-3.2$ sed -u 's/^/B->A: /' "$fifodir/echoBtoA" &
bash-3.2$ mkfifo "$fifodir/loopback"
bash-3.2$ nc -l -p 47002 < "$fifodir/loopback" \
          | tee "$fifodir/echoAtoB" \
          | nc -l -p 47001 \
          | tee "$fifodir/echoBtoA" > "$fifodir/loopback"
Run Code Online (Sandbox Code Playgroud)

这将侦听与端口47001和47002的连接,并将所有流量回显到标准输出.

在shell 2中做:

bash-3.2$ nc localhost 47001
Run Code Online (Sandbox Code Playgroud)

在shell 3中做:

bash-3.2$ nc localhost 47002
Run Code Online (Sandbox Code Playgroud)

现在在shell 2中输入的行将被写入shell 3,反之亦然,并且流量记录到shell 1,类似于:

B->A: input …
Run Code Online (Sandbox Code Playgroud)

unix shell pipe

10
推荐指数
3
解决办法
7176
查看次数

Java 9 中 libjvm.so 和 libjvm.dylib 的标准位置是什么

当我的(C)程序嵌入 Java 9 时,我试图找出要传递给链接器的文件的标准化位置。libjvm.so即(Linux/Solaris) 和libjvm.dylib(macOS)的“正确”路径。这样我的构建脚本等才能在未来安全。

Java 9 更改了 Java 安装的布局 ( JEP 220 ),以便使文件布局标准化,但我看到的所有文档都没有正确libjvm描述Linux 上 Java 9 的 Oracle 和 OpenJDK 版本中共享库的位置和macOS。

那么,有更新的权威文档吗?

JEP 220(声称已“交付”,作为JSR 376 的一部分:JavaTM 平台模块系统,它是 Java 9 的一部分)说:

Linux、macOS 和 Solaris 上的 lib 目录包含运行时系统的动态链接本机库,就像现在一样。这些名为 libjvm.so 或 libjvm.dylib 的文件可以通过嵌入运行时系统的程序进行链接。

(类似的描述在几个相关的错误跟踪器问题和网络上重复出现。)

但该描述并未描述当前(最终)版本。相反,他们似乎都将动态​​库放在lib/server/,而不是lib/.

(OpenJDK,至少在 Ubuntu 上,与JEP 220中描述的布局有额外的偏差。)

请注意,我只对链接完整的 JDK 安装感兴趣,例如从 Oracle 或 OpenJDK 获取的安装。我不会构建自己的安装,也不会随我的应用程序分发 java 运行时库的副本。

java-native-interface java-9

6
推荐指数
0
解决办法
3846
查看次数

如何区分Win32插槽手柄与其他管道手柄?

我需要确定我的代码没有创建的句柄GetFileType()==FILE_TYPE_PIPE,是否为套接字.似乎没有这方面的API.

我尝试了以下内容.一般的想法是使用特定于套接字的函数并将失败视为非套接字.

  • getsockopt() - 这是我的第一次尝试.不幸的是,当同一(非套接字)句柄上的许多线程调用时,它似乎挂起.
  • WSAEnumNetworkEvents()- 这就是Gnulib所做的,但如果手柄套接字会产生不良副作用.
  • getpeername() - 这就是cygwin所做的,但是对于一些套接字也会失败.猜测错误是否意味着套接字似乎不可靠且未来安全.

我不介意解决方案是否仅适用于某些版本的Windows,例如Vista,在一般情况下,我总是可以回到其他方法.

winapi winsock

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

标签 统计

algorithm ×1

java-9 ×1

java-native-interface ×1

pipe ×1

set ×1

shell ×1

unix ×1

winapi ×1

winsock ×1