我需要获取一个现有的xml文件,并修改一些属性并将文件写回.
我正在考虑使用libxml2来完成这项工作.应用程序是在Linux上运行的C/C++.
事实上,libxml2似乎包括厨房水槽的几种变体,以及便携式洗手间,淋浴和通过相同管道连接的各种其他东西.有不同的解析器可用,以及不同的处理方式.对于之前没有使用过libxml2的人来说,这有点令人生畏.
我应该看一下哪个例子,最后,我的输出.xml与原始输入文件相同,加上我所做的更改?到目前为止,我一直在使用libxml2的tree1.c,tree2.c和reader1.c示例,但只有这些输出xml不会在任何地方接近相同.
我想将一些二进制数据插入到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 的新格式.
我开始寻找一种从源代码生成手册页的方法.我现在有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) 给定这两个修改并返回字符串的函数:
// 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 ++,但我不明白为什么/如何.我担心第二个函数会调用自己,让我失控,直到堆栈耗尽为止.这保证有效吗?
在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但这导致了一只老鼠的窝.
我有一个应用程序,如果直接从Linux控制台运行,需要表现不同.因此,如果用户使用SSH连接以运行FooBar,或者用户走到控制台并直接登录以运行FooBar,我希望它能够执行不同的操作.
我需要调用什么C API来说明这两种情况之间的区别?我在想我必须查看"tty/pts"信息(例如我在运行"ps axf"时看到的信息),但我不确定这是否是最佳解决方案,也不是要调用的API获取这些信息.
提示赞赏.:)
试图学习如何在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) 我有一个单线程客户端/服务器应用程序,需要对其网络通信进行加密和解密.我计划使用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)
问题来自所有这些例子,我不确定在每次加密/解密时需要做什么,以及我应该只在启动时做一次.
特别:
EVP_CIPHER_CTX一次并继续重复使用它直到应用程序结束?EVP_CIPHER_CTX的加密和解密,或者我应该创建其中的2个?我写了一个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)
......或者我应该使用哪些更简单的东西?
给定一个旧式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)