- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
使用 Rasterbar libtorrent 我不希望下载的数据放在我的硬盘驱动器上,而是放在管道或变量或其他软件上,所以我可以将它重定向到其他地方,Mysql,如果不是我想要的,甚至是垃圾,是如果不是在 C++ 中使用 Libtorrent,无论如何最好在 python 绑定(bind)中执行此操作?
编辑:--> 我想指出这是一个 libtorrent 问题,而不是 Linux 文件处理或 Python 文件处理问题。我需要告诉 libtorrent,而不是传统上将文件保存在普通文件中,而是将其保存到我的 python 管道或变量等中。
最佳答案
您可以通过实现您自己的存储 类以与 libtorrent 一起使用来做到这一点。不幸的是,这在 python 中是不可能的,但你可以在 c++ 中完成。它的文档有点稀缺,可以找到here .
这是一个简单的例子,说明如何通过将所有数据存储在 RAM 中来实现这一点:
struct temp_storage : storage_interface
{
temp_storage(file_storage const& fs) : m_files(fs) {}
virtual bool initialize(bool allocate_files) { return false; }
virtual bool has_any_file() { return false; }
virtual int read(char* buf, int slot, int offset, int size)
{
std::map<int, std::vector<char> >::const_iterator i = m_file_data.find(slot);
if (i == m_file_data.end()) return 0;
int available = i->second.size() - offset;
if (available <= 0) return 0;
if (available > size) available = size;
memcpy(buf, &i->second[offset], available);
return available;
}
virtual int write(const char* buf, int slot, int offset, int size)
{
std::vector<char>& data = m_file_data[slot];
if (data.size() < offset + size) data.resize(offset + size);
std::memcpy(&data[offset], buf, size);
return size;
}
virtual bool rename_file(int file, std::string const& new_name) { assert(false); return false; }
virtual bool move_storage(std::string const& save_path) { return false; }
virtual bool verify_resume_data(lazy_entry const& rd, error_code& error) { return false; }
virtual bool write_resume_data(entry& rd) const { return false; }
virtual bool move_slot(int src_slot, int dst_slot) { assert(false); return false; }
virtual bool swap_slots(int slot1, int slot2) { assert(false); return false; }
virtual bool swap_slots3(int slot1, int slot2, int slot3) { assert(false); return false; }
virtual size_type physical_offset(int slot, int offset) { return slot * m_files.piece_length() + offset; };
virtual sha1_hash hash_for_slot(int slot, partial_hash& ph, int piece_size)
{
int left = piece_size - ph.offset;
TORRENT_ASSERT(left >= 0);
if (left > 0)
{
std::vector<char>& data = m_file_data[slot];
// if there are padding files, those blocks will be considered
// completed even though they haven't been written to the storage.
// in this case, just extend the piece buffer to its full size
// and fill it with zeroes.
if (data.size() < piece_size) data.resize(piece_size, 0);
ph.h.update(&data[ph.offset], left);
}
return ph.h.final();
}
virtual bool release_files() { return false; }
virtual bool delete_files() { return false; }
std::map<int, std::vector<char> > m_file_data;
file_storage m_files;
};
添加种子文件时,您还需要一个构造函数来通过 add_torrent_params
结构传入:
storage_interface* temp_storage_constructor(
file_storage const& fs, file_storage const* mapped
, std::string const& path, file_pool& fp
, std::vector<boost::uint8_t> const& prio)
{
return new temp_storage(fs);
}
从这一点来看,将其存储在 MySQL 数据库或任何其他后端应该是相当直接的。
关于c++ - 将下载的种子保存在内存中而不是文件 libtorrent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6089806/
编译libtorrent教程时'hello world'与: g++ main.cpp -o run -ltorrent-rasterbar -lboost_filesystem-mt -L/usr/
是否有人为洪流创建了填充文件? 如今有多少客户使用这些东西? “填充文件”是否全面? 我在ctorrent,trent,trasmission等新客户中没有发现此功能。 您是否具有此功能的实现或有关此
当我尝试使用 VIsual studio 9.0 进行构建时,我正在为我的应用程序使用提升,我得到1>LINK: fatal error LNK1104:无法打开文件“libtorrent.lib”
在 Libtorrent session 中有一些 enurm,我对如何设置 enurm 有点困惑,例如: struct session_settings { enum s
我如何正确转发声明一个类? //client_functions.cpp using namespace libtorrent; session Sess; bool Start_Client_Ses
我正在使用 libtorrent 将数据传输到 10k+ 个节点。这里我传输的数据非常小(大小为 10-50 MB)。我希望所有节点都将数据保存在内存中,直到所有其他节点完成下载以避免更多的磁盘 io
是否可以通过分配托管文件的服务器的 IP 地址来绕过跟踪器来制作 torrent 文件? 我对通过 libtorrent 的 bittorrents 文件传输协议(protocol)很感兴趣,他们以这
我正在尝试生成一个 torrent 并使用 python libtorrent 为其提供种子,它会生成 torrent,但不会为其提供种子。 我在 Ubuntu 14.04 上使用 libtorren
我有一个问题。我不是 C/C++ 程序员,libtorrent 文档对我来说并不是很清楚。没有像 libtorrent 的 python 文档那样的文档可供查找。 此刻,我尝试在 stackoverf
我使用add_magnet_uri获取信息,但是有一些资源响应慢,我应该使用什么来设置总超时时间? http://www.rasterbar.com/products/libtorrent/manua
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
使用 Rasterbar libtorrent 我不希望下载的数据放在我的硬盘驱动器上,而是放在管道或变量或其他软件上,所以我可以将它重定向到其他地方,Mysql,如果不是我想要的,甚至是垃圾,是如果
我想在开始下载之前设置上传/下载限制。对于前。目前我正在设置下载/上传限制,如下所示: info = lt.torrent_info(ft['torrent_info']) params = { 's
当通过 libtorrent(C++ 库)下载 torrent 时,会创建一个以 torrent 名称命名的文件夹,所有文件都下载到该文件夹中。例如,在 uTorrent 中,您可以在添加 tor
我想使用 libtorrent-rasterbar 来开发一些 torren 测试,但是当我尝试编译包中的示例时,我遇到了这个错误: g++ dump_torrent.cpp In file i
我已经在客户端开发了 torrent 程序,并使用 rutorrent 作为种子文件。我在 rutorrent 中使用插件 peer 来监控使用我的 torrent 应用程序的数字客户端。但在客户端选
我正在尝试设置 session 设置,但出现了一个我不太明白的错误,我能够正常设置 session ,根据 Libtorrent 文档,我只是将 session_settings 结构传递给 set_
我刚刚使用源代码编译并安装了 boost $密码 /Downloads/boost_1_58_0 ./b2 threading=multi link=static runtime-link=stati
据我所知,当播种或下载 Torrent 时,您的 IP 在跟踪器上并且会保留几个小时或几天 我如何使用 Libtorrent 手动告诉我的跟踪器我不再连接到跟踪器它应该忘记我的 IP,因为我既不播种也
我试图让 Session_Status 更新,但由于某种原因,结构的值永远不会更新, session 是这样启动的: using namespace libtorrent; session* Se
我是一名优秀的程序员,十分优秀!