Articles of 提升

BOOST_LOG_TRIVIAL vs logrotate(重新打开日志)

我有一个长时间作为服务运行的程序。 我使用BOOST_LOG_TRIVIAL(info) << "Message"来logging各种事件。 我想与logrotate合作,并在旋转后重新打开我的日志文件。 理论上这个剧本的作品如下: 我的程序启动,一些日志logging发生 日志从something.log更名为something.log.1由其他程序如logrotate或由我手动。 我的程序继续login到something.log.1文件。 我发送SIGHUP(或其他)到我的程序,所以我可以重新打开日志文件。 但我不知道如何。 我准备好的例子(可能没有必要): #include <iostream> #include <stdexcept> #include <csignal> #include <boost/thread.hpp> #include <boost/chrono.hpp> #include <boost/log/trivial.hpp> #include <boost/log/expressions.hpp> #include <boost/log/sources/severity_logger.hpp> #include <boost/log/sources/record_ostream.hpp> #include <boost/log/utility/setup/file.hpp> #include <boost/log/utility/setup/console.hpp> #include <boost/log/utility/setup/common_attributes.hpp> #include <boost/log/support/date_time.hpp> inline void setupLogging(std::string const &logFileName) { namespace logging = boost::log; namespace src = boost::log::sources; namespace expr = […]

使用accept()(Linux)的Boost线程中的性能/优先级

我已经实现了一个C ++类,它启动一个单独的线程接受连接(使用boost::asio )。 整个class级打算成为一个更大程序的asynchronous“命令接收器”。 主要的麻烦是:当等待传入的连接时,线程基本空闲。 我的看法是,这是浪费处理器时间(和硬件线程)什么都不做。 有没有什么办法可以执行低优先级的线程,或者是让线程不会干扰主程序,这是一个任务密集型和线程化的方式?

错误:'size_type'不是'boost :: interprocess :: message_queue'的成员

该程序正在编译和正确运行在我的朋友系统,但是当我试图在我的系统上执行它显示在上面的错误在下面的行。 message_queue::size_type recvd_size; I am also included the namespace using namespace boost::interprocess; 我已经安装了最新的boost库,使用sudo apt-get install libboost-all-dev但编译器显示错误消息为错误:'size_type'不是'boost :: interprocess :: message_queue'

如果date是2116年,boost timed_wait不会等待

这个例子: boost::interprocess::interprocess_semaphore semDone(0); long sec = 10; boost::posix_time::ptime until = boost::posix_time::second_clock::universal_time() + boost::posix_time::seconds(sec); bool ret = semDone.timed_wait(until); 它在Linux上完美的工作 – timed_wait等待10秒,然后返回false 。 但是,如果我将系统date移动到2116年,并重新运行应用程序, timed_wait调用立即返回false 。 助推器的状态variables也有同样的问题。 可以请任何人解释它有什么问题吗? 信息: Linux sles12 3.12.39 x86_64 GNU / Linux g ++ 4.8 提升1.54 UPD正如我已经写在上面,我正在64位平台上运行testing,并且time_t的大小等于8.所以build议使用64位time_t而不是32位的答案不适用于该问题。

增强支持循环文件吗?

我需要使用循环文件在磁盘上保存大量的dynamic数据(一次写入,可能永远不会读取)。 为了更清楚一点,我想把一个文件当作一个循环缓冲区 – 即写入缓冲区的文件将被读取,读取的文件将被读取。 具体来说,我正在做日志。 我想知道如果提升有任何function,我可以使用(理想情况下,一个循环文件​​)。 我看到在boost中有一个循环缓冲区,但我不能用它作为某种后端文件。 我甚至想过mmap()将文件放到内存中(如果我使用大小超过4GB的日志,这将不是一个好的解决scheme),并将映射的块返回到我将传递给缓冲区的Allocator 。 这似乎是一个坏的方法,因为循环缓冲区文档说Allocator将用于任何内存分配(而不仅仅是缓冲区分配)。 有没有其他function的循环文件,或其他方式来做到这一点? 那么,我的意思是logging文件系统日志的意思(即logging写入)。 我有一个磁盘,我想logging(写入它),以便我可以做CDP。 我需要logging下所有的写入和标记,以便我可以将磁盘重新放回原来的位置。 日志可能有很多空间(容易超过10GB),所以我不知道mmap解决scheme是否可以工作。

我如何改变shm_openpath?

我目前正在ubunto上开发一个应用程序并调用shm_open,目前默认的path是在/ var / run / shm中。 但是我需要将其更改为/ tmp。 简单地尝试以下不起作用: fd = shm_open(“/ tmp / test”,O_RDWR | O_CREAT,0777); 任何人都可以请指教?

C ++ boost日志logging编译错误(linux)

谁能告诉我我做错了什么? 在控制台上运行这会产生以下错误: #c ++ -I / var / local / boost_1_46_1 / log.cpp -o log -lboost-log log.cpp:在函数中âvoidinit()â:log.cpp:11:错误:âboost::loggingâ没有被声明log.cpp:13:错误:âboost::fltâ没有被声明log.cpp:13:错误:âloggingâ没有被声明log.cpp:13:错误:âloggingâ没有被声明 我也试过显式连接来自stage和/ usr / local / lib目录的库。 我的log.cpp: #include <boost/log/core.hpp> #include <boost/log/trivial.hpp> #include <boost/log/filters.hpp> using namespace std; void init() { boost::logging::core::get()->set_filter ( boost::flt::attr< boost::logging::trivial::severity_level >("Severity") >= boost::logging::trivial::info ); } } int main(int, char*[]) { BOOST_LOG_TRIVIAL(trace) << "A trace severity […]

如何使用BCP提取可以构build的Boost的子集?

我正在尝试在Boost中使用bcp工具来提取要在我的项目中使用的标题/库的子集。 操作系统:Linux Ubuntu 12.04 LTS x64 Boost版本:1.56.0,作为boost.org的源代码下载 我也想使用一个自定义的命名空间,这个自定义的命名空间是由bcp提供的,但是生成的代码需要被编译,而这不是那么直截了当。 我会想到一个简单的 ./dist/bin/bcp –namespace=myboost build filesystem ../myboost 足以产生一组可以build立“文件系统”库的文件,但似乎还有一些问题正在不断出现。 我已经阅读了所有可以find的networking上的相关post,但没有一个提出了可行的解决scheme。 我遵循的步骤和相应的错误消息在下面详述。 解压boost 1.56.0 tarball之后,我做了以下工作: ./bootstrap.sh ./b2 tools/bcp mkdir ../myboost ./dist/bin/bcp –namespace=myboost build filesystem ../myboost 复制到../myboost中的文件不包含bootstrap.sh,b2,bjam或其他* .jam文件,这些文件似乎是“构build”目标应包含的东西,对吧? 其他来源(包括stackoverflowpost)build议从原来的提升位置复制这些文件: cp bootstrap.sh boost-build.jam boostcpp.jam ../myboost cd ../myboost ./bootstrap.sh 这然后build立b2和bjam好的。 当运行b2时,事情会崩溃: ./b2 /work/approved-osslibs/boost/boost-1.56.0/myboost/tools/build/src/build /project.jam:262: in find-jamfile from module project error: Unable to load […]

boost :: mpi阻塞IO没有被linux信号中断

我使用boost :: mpi,OpenMPI。 boost :: mpi :: communicator :: recv(阻塞版本)不会被Linux信号中断。 SIGTERM信号如何以正确的方式终止程序?

扩展boost.asio文件I / O为Linux

根据这个问题关于这个话题没有任何asynchronous文件io asio除了Windows … 很好,没有人知道任何已经写在Linux上的asynchronous文件IO的asio扩展? 或者是否有人知道如何扩展asio以支持asynchronousio {insert-whatever-here}的任何示例?