这是一个相关的问题,但我无法弄清楚如何应用mechanize/urllib2的答案:如何强制python httplib库只使用A请求
基本上,给出这个简单的代码:
#!/usr/bin/python
import urllib2
print urllib2.urlopen('http://python.org/').read(100)
Run Code Online (Sandbox Code Playgroud)
这导致wireshark说以下内容:
0.000000 10.102.0.79 -> 8.8.8.8 DNS Standard query A python.org
0.000023 10.102.0.79 -> 8.8.8.8 DNS Standard query AAAA python.org
0.005369 8.8.8.8 -> 10.102.0.79 DNS Standard query response A 82.94.164.162
5.004494 10.102.0.79 -> 8.8.8.8 DNS Standard query A python.org
5.010540 8.8.8.8 -> 10.102.0.79 DNS Standard query response A 82.94.164.162
5.010599 10.102.0.79 -> 8.8.8.8 DNS Standard query AAAA python.org
5.015832 8.8.8.8 -> 10.102.0.79 DNS Standard query response AAAA 2001:888:2000:d::a2
Run Code Online (Sandbox Code Playgroud)
这是一个5秒的延迟!
我的系统中没有启用IPv6(gentoo编译 …
有没有简单的方法来复制C字符串?
我有const char *stringA,我想char *stringB取值(注意stringB不是const).我试过stringB=(char*) stringA,但这stringB仍然指向相同的内存位置,所以当stringA以后的更改时,stringB也是如此.
我也试过strcpy(stringB,stringA),但似乎如果stringB没有初始化为足够大的数组,那就是段错误.我对C字符串没有超级经验,我错过了一些明显的东西吗?如果我只是初始化stringB为char *stringB[23],因为我知道我永远不会有一个比22字符更长的字符串(并允许空终止符),这是正确的方法吗?如果stringB检查是否与其他C字符串相等,那么额外的空格是否会影响任何内容?
(并且在这里使用字符串不是解决方案,因为我需要最小的开销并且可以轻松访问单个字符)
这件事发生在我之前,但我不记得我是如何修理它的.
我无法在新的Ubuntu安装上编译一些程序......我的标题出了点问题.
我试过g ++ - 4.1和4.3无济于事.
g++ -g -frepo -DIZ_LINUX -I/usr/include/linux -I/usr/include -I/include -c qlisttest.cpp
/usr/include/libio.h:332: error: ‘size_t’ does not name a type
/usr/include/libio.h:336: error: ‘size_t’ was not declared in this scope
/usr/include/libio.h:364: error: ‘size_t’ has not been declared
/usr/include/libio.h:373: error: ‘size_t’ has not been declared
/usr/include/libio.h:493: error: ‘size_t’ does not name a type
/usr/include/stdio.h:294: error: ‘size_t’ has not been declared
...
Run Code Online (Sandbox Code Playgroud)
文件...
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
...
@ubuntu:~/work/zpk/src$ cat /usr/include/linux/types.h | grep size_t
typedef __kernel_size_t …Run Code Online (Sandbox Code Playgroud) 所以我有一个应用程序可以在windows,linux和一些unix版本上编译.我最近决定在遇到障碍时把它移植到OSX.
我有一个看起来像这样的模板:
template<int (&F)(int)>
int safe_ctype(unsigned char c) { return F(c); }
Run Code Online (Sandbox Code Playgroud)
这个想法是为了防止符号扩展在给定上面的输入值时崩溃某些实现0x7f.它通常像这样使用:
safe_ctype<std::isspace>(ch);
Run Code Online (Sandbox Code Playgroud)
遗憾的是,这不适用于OSX(使用gcc 4.2).该错误与std::isspace没有外部链接有关,因此不适用于模板.事实证明,在OSX上,ctype.h标题具有标记的所有功能(通过宏)static inline.
这是我的问题:
是否允许C++中的函数(在本例中是从C继承的部分)标准库中的函数的任何相关标准都没有外部链接?
编辑:
我从苹果那里听说过.显然他们有一个宏来控制这种行为.定义_DONT_USE_CTYPE_INLINE_可防止ctype函数成为静态内联函数.
我有一个php变量,其中包含html/smarty代码
$x='<a href="{$link}" >{$title}</a>';
Run Code Online (Sandbox Code Playgroud)
这个数据是从数据库中获取的,我想用smarty对它进行评估,并将输出放入php变量(将其打印出来或再次将其保存到数据库中).
谢谢
编辑:
我希望使用smarty评估X的内容,就好像x的内容存储在file.tpl中然后$ y = $ smarty-> fetch('file.tpl'); ...想要这样做而不需要将x的内容保存到文件中
所以我有一个库(不是我写的),不幸的是它abort()用来处理某些错误.在应用程序级别,这些错误是可恢复的,所以我想处理它们而不是用户看到崩溃.所以我最终编写这样的代码:
static jmp_buf abort_buffer;
static void abort_handler(int) {
longjmp(abort_buffer, 1); // perhaps siglongjmp if available..
}
int function(int x, int y) {
struct sigaction new_sa;
struct sigaction old_sa;
sigemptyset(&new_sa.sa_mask);
new_sa.sa_handler = abort_handler;
sigaction(SIGABRT, &new_sa, &old_sa);
if(setjmp(abort_buffer)) {
sigaction(SIGABRT, &old_sa, 0);
return -1
}
// attempt to do some work here
int result = f(x, y); // may call abort!
sigaction(SIGABRT, &old_sa, 0);
return result;
}
Run Code Online (Sandbox Code Playgroud)
代码不是很优雅.由于这种模式最终必须在代码的几个点重复,我想简化一点,并可能将它包装在一个可重用的对象中.我的第一次尝试涉及使用RAII来处理信号处理程序的设置/拆除(需要完成,因为每个函数需要不同的错误处理).所以我想出了这个:
template <int N>
struct signal_guard {
signal_guard(void (*f)(int)) {
sigemptyset(&new_sa.sa_mask);
new_sa.sa_handler = …Run Code Online (Sandbox Code Playgroud) 我有一个项目,我想更多地使用智能指针.总的来说,我在这个目标上取得了成功.但是,我遇到过一些我不确定"最佳实践"是什么的事情.
基本上我想从函数返回一个"指针",但要求用户将它保存在智能指针中.不仅如此,我不想强制使用特定的智能指针(共享与范围).
问题主要在于似乎没有适当的方法将a升级scoped_ptr为a shared_ptr(这是我认为的理想解决方案).我明白为什么他们不这样做,因为它会允许转让所有权,这可能导致一些像这样的问题std::auto_ptr.
但是,对于这种情况,转让所有权似乎是一个好主意.所以我的想法是这样的:
// contrived example of factory pattern
std::auto_ptr<A> func() { return std::auto_ptr<A>(new A); }
Run Code Online (Sandbox Code Playgroud)
因为两者都有"好",scoped_ptr并且shared_ptr拥有从a获得所有权的构造函数std::auto_ptr.
所以我的问题是,这是一个好习惯吗?有更好的解决方案吗?我能够想出的唯一真正的替代方法是使用模板模板作为返回值,如下所示:
// similar to above example
template <template <typename> class P>
P<A> func() { return P<A>(new A); }
Run Code Online (Sandbox Code Playgroud)
实际上可以很好地工作,除了我认为它需要一些工作来使它与它一起工作scoped_ptr.
思考?
我用于简单字符串拆分的常见代码如下所示:
inline std::vector<std::string> split(const std::string &s, char delim) {
std::vector<std::string> elems;
std::stringstream ss(s);
std::string item;
while(std::getline(ss, item, delim)) {
elems.push_back(item);
}
return elems;
}
Run Code Online (Sandbox Code Playgroud)
有人提到这会默默地"吞噬"发生的错误std::getline.当然,我同意这种情况.但是我想到了,在实践中我可能会出现什么问题,我需要担心.基本上这一切归结为:
inline std::vector<std::string> split(const std::string &s, char delim) {
std::vector<std::string> elems;
std::stringstream ss(s);
std::string item;
while(std::getline(ss, item, delim)) {
elems.push_back(item);
}
if(/* what error can I catch here? */) {
// *** How did we get here!? ***
}
return elems;
}
Run Code Online (Sandbox Code Playgroud)
A stringstream由a支持string,因此我们不必担心与从文件读取相关的任何问题.此处没有类型转换,因为getline只需读取直到它看到行分隔符或EOF.所以我们不能得到任何类似的错误boost::lexical_cast …
我有一个容器(C++),我需要以两种方式操作,来自不同的线程:1)添加和删除元素,以及2)遍历其成员.显然,在迭代发生时删除元素=灾难.代码看起来像这样:
class A
{
public:
...
void AddItem(const T& item, int index) { /*Put item into my_stuff at index*/ }
void RemoveItem(const T& item) { /*Take item out of m_stuff*/ }
const list<T>& MyStuff() { return my_stuff; } //*Hate* this, but see class C
private:
Mutex mutex; //Goes in the *Item methods, but is largely worthless in MyStuff()
list<T> my_stuff; //Just as well a vector or deque
};
extern A a; //defined in the .cpp file
class B
{
... …Run Code Online (Sandbox Code Playgroud) 我有一个项目,"安装"代码并不像复制一些文件那么简单.使用传统的Makefile,我只需要创建一个make install运行一系列shell命令的目标来完成我需要的操作.
但谷歌搜索导致没有这方面的例子(一些事情接近,但不完全......我认为).所以基本上,我想要一个自定义命令,它取决于目标可执行文件,但什么都不产生,并运行一个不需要可移植的脚本来完成"安装"
有人有这样的例子吗?