什么是以紧凑和快速的方式表示稀疏整数集(真正的C内存地址)的好方法.我已经知道像位向量和行程编码这样的显而易见的事情了.但我想要比每组元素一个词更紧凑的东西.我需要添加和删除元素并测试成员资格.我不需要其他的集合操作,比如union.
多年前我读过一个这样的图书馆,但后来忘记了它的名字.我认为它是由HP发布的,并且有一个女人的名字.
我有两个(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) 当我的(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 运行时库的副本。
我需要确定我的代码没有创建的句柄GetFileType()==FILE_TYPE_PIPE,是否为套接字.似乎没有这方面的API.
我尝试了以下内容.一般的想法是使用特定于套接字的函数并将失败视为非套接字.
getsockopt() - 这是我的第一次尝试.不幸的是,当同一(非套接字)句柄上的许多线程调用时,它似乎挂起.WSAEnumNetworkEvents()- 这就是Gnulib所做的,但如果手柄是套接字会产生不良副作用.getpeername() - 这就是cygwin所做的,但是对于一些套接字也会失败.猜测错误是否意味着套接字似乎不可靠且未来安全.我不介意解决方案是否仅适用于某些版本的Windows,例如Vista,在一般情况下,我总是可以回到其他方法.