小编Sté*_*ane的帖子

如何使用libxml2修改现有的xml文件?

我需要获取一个现有的xml文件,并修改一些属性并将文件写回.

我正在考虑使用libxml2来完成这项工作.应用程序是在Linux上运行的C/C++.

事实上,libxml2似乎包括厨房水槽的几种变体,以及便携式洗手间,淋浴和通过相同管道连接的各种其他东西.有不同的解析器可用,以及不同的处理方式.对于之前没有使用过libxml2的人来说,这有点令人生畏.

我应该看一下哪个例子,最后,我的输出.xml与原始输入文件相同,加上我所做的更改?到目前为止,我一直在使用libxml2的tree1.c,tree2.c和reader1.c示例,但只有这些输出xml不会在任何地方接近相同.

c xml linux libxml2

10
推荐指数
1
解决办法
1万
查看次数

如何使用C++ libpqxx API将二进制数据插入PostgreSQL BYTEA列?

我想将一些二进制数据插入到BYTEA列中,但我发现Doxygen输出缺乏详细信息,并且http://pqxx.org/在过去几天内一直处于停顿状态.

我如何将somefile.bin的内容插入带有BYTEA列的表中?

我所拥有的是这些方面:

pqxx::work work( conn );
work.exec( "CREATE TABLE test ( name varchar(20), data BYTEA )" );
work.exec( "INSERT INTO test( name, data ) VALUES ( 'foo', <insert filename.bin here> )" );
work.commit();
Run Code Online (Sandbox Code Playgroud)

如果它有所不同,我想hex在PostgreSQL 9.1中使用BYTEA 的新格式.

c++ postgresql libpqxx

10
推荐指数
1
解决办法
1万
查看次数

可以强制Doxygen创建像样的手册吗?

我开始寻找一种从源代码生成手册页的方法.我现在有Doxygen设置,它生成了很棒的HTML页面,这些页面有组织,有用,等等.

但是......看起来Doxygen糟透了所创造的体面或可用的手册页.从更多谷歌搜索来看,在使用Doxygen生成手册页时,似乎可能是普遍的共识.这是真的吗,还是有一个页面/提示解释了如何让Doxygen在手册页上做得更好?

我在GitHub上找到了一个项目 - doxy2man - 它似乎专门用于将Doxygen xml输出文件重新按压到手册页中,但我很想知道Doxygen本身是否可以被强制做得更好.

我正在使用的Doxygen选项(没有很多)用于手册页:

$ grep MAN Doxyfile | grep -v "#"
GENERATE_MAN           = YES
MAN_OUTPUT             = man
MAN_EXTENSION          = .3
MAN_LINKS              = YES
Run Code Online (Sandbox Code Playgroud)

linux doxygen manpage

9
推荐指数
0
解决办法
706
查看次数

什么保证调用重载的非const方法?

给定这两个修改并返回字符串的函数:

// modify the original string, and for convenience return a reference to it
std::string &modify( std::string &str )
{
    // ...do something here to modify the string...
    return str;
}

// make a copy of the string before modifying it
std::string modify( const std::string &str )
{
    std::string s( str );
    return modify( s ); // could this not call the "const" version again?
}
Run Code Online (Sandbox Code Playgroud)

这段代码适用于我使用GCC g ++,但我不明白为什么/如何.我担心第二个函数会调用自己,让我失控,直到堆栈耗尽为止.这保证有效吗?

c++ recursion signature

9
推荐指数
1
解决办法
161
查看次数

如何获得像"top"命令一样的per-cpu统计信息(system,idle,nice,...)?

在linux上,我想知道要调用什么"C"API来获取per-cpu统计信息.

我知道并且可以/proc/loadavg从我的应用程序中读取,但这是系统范围的负载平均值,而不是每个cpu信息.我想分开各个CPU或核心.

作为执行此操作的应用程序的示例,当我运行top并按"1"时,我可以看到4或8个处理器/核心,如下所示:

Cpu0  :  4.5%us,  0.0%sy,  0.0%ni, 95.5%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu1  : 42.2%us,  6.2%sy,  0.5%ni, 51.2%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu2  :  3.0%us,  1.5%sy,  0.0%ni, 94.5%id,  0.0%wa,  0.0%hi,  1.0%si,  0.0%st
Cpu3  :  7.0%us,  4.7%sy,  0.0%ni, 88.3%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Run Code Online (Sandbox Code Playgroud)

我试过,strace top但这导致了一只老鼠的窝.

c linux cpu-usage

8
推荐指数
1
解决办法
9224
查看次数

如何判断在Linux控制台和ssh会话中运行?

我有一个应用程序,如果直接从Linux控制台运行,需要表现不同.因此,如果用户使用SSH连接以运行FooBar,或者用户走到控制台并直接登录以运行FooBar,我希望它能够执行不同的操作.

我需要调用什么C API来说明这两种情况之间的区别?我在想我必须查看"tty/pts"信息(例如我在运行"ps axf"时看到的信息),但我不确定这是否是最佳解决方案,也不是要调用的API获取这些信息.

提示赞赏.:)

linux console tty

8
推荐指数
3
解决办法
6190
查看次数

为什么这个C++ 11 std :: regex示例会抛出一个regex_error异常?

试图学习如何在C++ 11中使用新的std :: regex.但我尝试的例子是抛出一个我不明白的regex_error异常.这是我的示例代码:

#include <iostream>
#include <regex>

int main()
{
    std::string str = "xyzabc1xyzabc2xyzabc3abc4xyz";
    std::regex re( "(abc[1234])" ); // <-- this line throws a C++ exception

    // also tried to do this:
    // std::regex re( "(abc[1234])", std::regex::optimize | std::regex::extended );

    while ( true )
    {
        std::cout << "searching in " << str << std::endl;
        std::smatch match;
        std::regex_search( str, match, re );
        if ( match.empty() )
        {
            std::cout << "...no more matches" << std::endl;
            break;
        }
        for ( auto x …
Run Code Online (Sandbox Code Playgroud)

c++ regex g++ c++11

8
推荐指数
1
解决办法
3万
查看次数

我需要多个EVP_CIPHER_CTX结构吗?

我有一个单线程客户端/服务器应用程序,需要对其网络通信进行加密和解密.我计划使用OpenSSL的EVP API和AES-256-CBC.

我从一些例子中找到了一些示例伪代码:

// key is 256 bits (32 bytes) when using EVP_aes_256_*()
// I think iv is the same size as the block size, 128 bits (16 bytes)...is it?
1: EVP_CIPHER_CTX *ctx = EVP_CIPHER_CTX_new();
2: EVP_CipherInit_ex(ctx, EVP_aes_256_cbc(), NULL, key, iv, 1); //0=decrypt, 1=encrypt
3: EVP_CipherUpdate(ctx, outbuf, &outlen, inbuf, inlen);
4: EVP_CipherFinal_ex(ctx, outbuf + outlen, &tmplen));
5: outlen += tmplen;
6: EVP_CIPHER_CTX_cleanup(ctx);
7: EVP_CIPHER_CTX_free(ctx);
Run Code Online (Sandbox Code Playgroud)

问题来自所有这些例子,我不确定在每次加密/解密时需要做什么,以及我应该只在启动时做一次.

特别:

  • 在第1行,我是否只创建EVP_CIPHER_CTX一次并继续重复使用它直到应用程序结束?
  • 同样在第1行,我可以重复使用相同EVP_CIPHER_CTX的加密和解密,或者我应该创建其中的2个?
  • 在第2行,是否应该在我正在加密的每个数据包上重新设置IV?或者我只将IV设置一次,然后让它永远继续下去?
  • 如果我正在加密UDP数据包,数据包很容易丢失或被无序接收怎么办?我认为CBC无法正常工作,或者我需要在每个数据包开始时重置IV我发出去了?

openssl aes

8
推荐指数
2
解决办法
4196
查看次数

查找使用AgentX实现SNMP表的示例代码

我写了一个AgentX应用程序(Linux,gcc,g ++),它可以很好地发送回缩放器.这是我现在正在做的事情:

init_agent( "blah" );
netsnmp_register_read_only_scalar( netsnmp_create_handler_registration( "foo1", handle_foo1, oid, oid.size(), HANDLER_CAN_RONLY ) );
init_snmp( "blah" );
while ( true )
{
    // internal stuff
    agent_check_and_process(1); // where 1==block
}
Run Code Online (Sandbox Code Playgroud)

handle_foo1(...)调用函数snmp_set_var_typed_value(...)返回在应用程序中的全局C结构中缓存的值.

我现在要做的是修改此代码以支持SNMP表.表的内容作为STL容器存储/缓存在应用程序中.这是一个相对简单的SNMP表,具有连续的行,所有列都由Integer32,Gauge32,InetAddress和TruthValue等类型组成.问题是我在net-snmp网站上看不到很好的代码示例,只是很多doxygen页面.

我的问题:

我应该看什么API?这些是正确的电话:

netsnmp_register_read_only_table_data();
netsnmp_create_table_data();
netsnmp_create_table_data_row();
netsnmp_table_data_add_row();
Run Code Online (Sandbox Code Playgroud)

......或者我应该使用哪些更简单的东西?

c c++ snmp net-snmp

7
推荐指数
1
解决办法
2万
查看次数

没有用于调用'regex_search(...)'的匹配函数

给定一个旧式const char *指针和一个长度,有没有办法调用std::regex_search()它而不先将缓冲区的内容复制到std::string?这是我遇到的问题的一个简单示例:

#include <regex>

int main()
{
    const char *text = "123 foobar 456";
    const size_t len = strlen(text);

    const std::regex rx(" (.+)bar");

    std::smatch what;
    std::regex_search( text, text+len, what, rx); // <- problematic line

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我认为第五个带有两个迭代器的std :: regex_search()是我需要的,但是我还没有完全理解如何将指针转换为迭代器.当我尝试编译上面的代码时,我得到了这个:

g++ -std=c++11 test.cpp
test.cpp:11:45: error: no matching function for call to ‘regex_search(const char*&, const char*, std::smatch&, const regex&)’
/usr/include/c++/4.9/bits/regex.h:2131:5: note: template<class _Bi_iter, class _Alloc, class _Ch_type, class _Rx_traits> bool …
Run Code Online (Sandbox Code Playgroud)

c++ regex c++11 g++4.9

7
推荐指数
1
解决办法
4059
查看次数

标签 统计

c++ ×5

linux ×4

c ×3

c++11 ×2

regex ×2

aes ×1

console ×1

cpu-usage ×1

doxygen ×1

g++ ×1

g++4.9 ×1

libpqxx ×1

libxml2 ×1

manpage ×1

net-snmp ×1

openssl ×1

postgresql ×1

recursion ×1

signature ×1

snmp ×1

tty ×1

xml ×1