小编Eva*_*ran的帖子

强制python mechanize/urllib2只使用A请求?

这是一个相关的问题,但我无法弄清楚如何应用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编译 …

python mechanize urllib ipv6

11
推荐指数
2
解决办法
5510
查看次数

正确的方法来复制C字符串

有没有简单的方法来复制C字符串?

我有const char *stringA,我想char *stringB取值(注意stringB不是const).我试过stringB=(char*) stringA,但这stringB仍然指向相同的内存位置,所以当stringA以后的更改时,stringB也是如此.

我也试过strcpy(stringB,stringA),但似乎如果stringB没有初始化为足够大的数组,那就是段错误.我对C字符串没有超级经验,我错过了一些明显的东西吗?如果我只是初始化stringBchar *stringB[23],因为我知道我永远不会有一个比22字符更长的字符串(并允许空终止符),这是正确的方法吗?如果stringB检查是否与其他C字符串相等,那么额外的空格是否会影响任何内容?

(并且在这里使用字符串不是解决方案,因为我需要最小的开销并且可以轻松访问单个字符)

c++ string copy cstring

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

在Ubuntu 8.1上,g ++ - 4.1或其他版本无法找到size_t

这件事发生在我之前,但我不记得我是如何修理它的.

我无法在新的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)

c++ linux header size-t

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

所需的c ++标准库中的所有函数都有外部链接吗?

所以我有一个应用程序可以在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函数成为静态内联函数.

c c++ standard-library linkage

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

Smarty:评估存储在PHP变量中的模板

我有一个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的内容保存到文件中

php smarty

10
推荐指数
3
解决办法
8387
查看次数

longjmp和RAII

所以我有一个库(不是我写的),不幸的是它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)

c++ raii signal-handling longjmp

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

返回一个需要由智能指针保持的"指针"

我有一个项目,我想更多地使用智能指针.总的来说,我在这个目标上取得了成功.但是,我遇到过一些我不确定"最佳实践"是什么的事情.

基本上我想从函数返回一个"指针",但要求用户将它保存在智能指针中.不仅如此,我不想强​​制使用特定的智能指针(共享与范围).

问题主要在于似乎没有适当的方法将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.

思考?

c++ boost tr1

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

方式std :: stringstream可以设置失败/坏位吗?

我用于简单字符串拆分的常见代码如下所示:

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++ stringstream getline

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

如何以线程安全的方式迭代容器?

我有一个容器(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)

c++ iteration containers iterator thread-safety

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

cmake运行安装目标的脚本?

我有一个项目,"安装"代码并不像复制一些文件那么简单.使用传统的Makefile,我只需要创建一个make install运行一系列shell命令的目标来完成我需要的操作.

但谷歌搜索导致没有这方面的例子(一些事情接近,但不完全......我认为).所以基本上,我想要一个自定义命令,它取决于目标可执行文件,但什么都不产生,并运行一个不需要可移植的脚本来完成"安装"

有人有这样的例子吗?

cmake

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