在Linux中如何做到这一点,以便在读取文件时,当前应用程序从另一个应用程序接收数据?
假设我有一个文件“hello.txt”,其中包含文本“hello,world!” 我有一个应用程序“textreader”,它读取hello.txt文件并将其放入stdout。 接下来,我对文件“hello.txt”进行了加密。可以通过一个特殊的库对其进行解密,该库可以逐字节读取文件 如何使用我的库(或我的应用程序)使用应用程序“textreader”作为普通文件读取加密文件?根据这个问题,我不能写一些临时文件 可以使用命名管道(mkfifo),但前提是要寻求支持。文件必须随机读取在Linux中如何做到这一点,以便在读取文件时,当前应用程序从另一个应用程序接收数据?,linux,cryptography,Linux,Cryptography,假设我有一个文件“hello.txt”,其中包含文本“hello,world!” 我有一个应用程序“textreader”,它读取hello.txt文件并将其放入stdout。 接下来,我对文件“hello.txt”进行了加密。可以通过一个特殊的库对其进行解密,该库可以逐字节读取文件 如何使用我的库(或我的应用程序)使用应用程序“textreader”作为普通文件读取加密文件?根据这个问题,我不能写一些临时文件 可以使用命名管道(mkfifo),但前提是要寻求支持。文件必须随机读取 如果我没有“
如果我没有“textreader”的源代码,有人知道我该怎么做吗?将加密文件加载到内存中并从内存缓冲区解密怎么样?
一些脚本语言(如perl、python等)可以读取整个文件并将其分配给变量如何将加密文件加载到内存中并从内存缓冲区解密?
一些脚本语言,如perl、python等,可以读取整个文件并将其分配给变量,编写一个共享库来替换标准的Linux I/O例程,以及 如果应用程序动态链接到C库,这将起作用-如果“textreader”直接进行系统调用,那么拦截将不起作用 另见:
- 简单地使用stdin怎么样
如果textreader应用程序将
hello.txt
转换为标准输出,只需通过管道将textreader的输出传输到您自己的应用程序/脚本。例如:
$。/text阅读器|./myapp
根据您决定在应用程序中使用的语言,您可以用处理大多数流的相同方式处理stdin
以下答案应为您提供有关如何以不同语言阅读stdin的更多信息:
- Python:
- C++:
- PHP:
#include <iostream>
int main(void) {
int i = 0;
std::string buffer;
while (not std::cin.eof()) {
std::getline(std::cin, buffer);
if (buffer.find("while") != std::string::npos)
if (i < 10)
std::cin.seekg(0, std::ios::beg);
else
std::cin.seekg(0, std::ios::end);
std::cout << "Line " << i++ << ": " << buffer << std::endl;
}
return 0;
}
#包括
内部主(空){
int i=0;
字符串缓冲区;
while(不是std::cin.eof()){
std::getline(std::cin,buffer);
if(buffer.find(“while”)!=std::string::npos)
如果(i<10)
标准::cin.seekg(0,标准::ios::beg);
其他的
标准::cin.seekg(0,标准::ios::结束);
std::cout简单使用stdin怎么样
如果textreader应用程序将hello.txt
转换为标准输出,只需将textreader的输出通过管道传输到您自己的应用程序/脚本即可。例如:
$。/text阅读器|./myapp
根据您决定在应用程序中使用的语言,您可以用处理大多数流的相同方式处理stdin
以下答案应为您提供有关如何以不同语言阅读stdin的更多信息:
- Python:
- C++:
- PHP:
维基百科也是
<> > > >编辑:大多数流是可搜索的,正如您最初所问的。我在C++中写了一个小例子,说明如何查找<代码> STDIN < /C> >
#include <iostream>
int main(void) {
int i = 0;
std::string buffer;
while (not std::cin.eof()) {
std::getline(std::cin, buffer);
if (buffer.find("while") != std::string::npos)
if (i < 10)
std::cin.seekg(0, std::ios::beg);
else
std::cin.seekg(0, std::ios::end);
std::cout << "Line " << i++ << ": " << buffer << std::endl;
}
return 0;
}
#包括
内部主(空){
int i=0;
字符串缓冲区;
while(不是std::cin.eof()){
std::getline(std::cin,buffer);
if(buffer.find(“while”)!=std::string::npos)
如果(i<10)
标准::cin.seekg(0,标准::ios::beg);
其他的
标准::cin.seekg(0,标准::ios::结束);
std::cout通常这是使用文件系统过滤器驱动程序完成的,该驱动程序将动态执行解密。为了支持随机搜索,您必须在独立块(64-256Kb大)中加密数据并以解密的形式将这些块缓存在内存中。这不是一项简单的任务,但可以完成。我不知道如何在Linux上实现过滤器驱动程序(我们为Windows提供了类似的产品).通常使用文件系统过滤器驱动程序完成,该驱动程序将动态执行解密。为了支持随机搜索,您必须在独立块(64-256Kb大)中加密数据并以解密的形式将这些块缓存在内存中。这不是一项简单的任务,但可以完成。我不知道如何在Linux上实现过滤器驱动程序(我们为Windows提供了类似的产品)该方法应该支持随机查找。从我的理解来看,标准输入只能是串行的。@ USER 12429 96我已经编辑了我的答案,在C++中添加了一个简单的查找例子。从STDIN中读取与从大多数流中读取没有什么不同。该方法应该支持随机搜索。正如我所理解的。@ USE12429我已经编辑了我的答案,在C++中添加了一个简单的查找例子。从STDIN中读取与从大多数流中读取没有什么不同。我也在考虑。它不是最优雅的解决方案,但显然没有其他的。我也在考虑。它不是最优雅的解决方案,但显然没有其他。