小编Yur*_*sov的帖子

除以零不会抛出SIGFPE

我有一个小程序执行零浮点除法,所以我期待SIGFPE.

#include <sys/types.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <iostream>

void signal_handler (int signo) {
    if(signo == SIGFPE) {
      std::cout << "Caught FPE\n";
    }
}

int main (void) {
  signal(SIGFPE,(*signal_handler));

  double b = 1.0;
  double c = 0.0;
  double d = b/c;
  std::cout << "d = "<< d << std::endl;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

实际上,我得到了以下输出:

d = inf
Run Code Online (Sandbox Code Playgroud)

gcc版本4.5.2(Ubuntu/Linaro 4.5.2-8ubuntu4)

在这种情况下,我应该怎么做才能抛出SIGFPE?FP操作行为依赖于哪些因素(编译器标志/ CPU类型等)?

谢谢

c++ floating-point gcc sigfpe

17
推荐指数
3
解决办法
6973
查看次数

Python subprocess.Popen和异步输出

我有简单的Python脚本来在Windows和Linux下执行测试套件.每个测试都将其输出写入单独的文件.我使用subprocess.Popen类在一个循环中执行shell命令.

每个shell命令都是这样开始的:

def system_execute(self, command, path, out_file):
    params_list = command.split(' ') 
    file_path = os.path.join(path, out_file)
    f = open(file_path, "w")
    subprocess.Popen(params_list, stdout=f)
    f.close()
Run Code Online (Sandbox Code Playgroud)

它工作正常,但脚本在写入所有输出文件之前完成其工作.实际上,我获得了数百个零大小的文件,并且完成编写输出和关闭句柄需要一些时间.任何人都可以解释为什么它的工作如此奇怪,是否有同步方式来做同样的工作?

谢谢

python subprocess asynchronous

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

OSX上的PF头net / pfvar.h丢失

PF(数据包过滤器)是内核级别的防火墙,包含在类似BSD的内核中(Darwin内核基本上是BSD),并且BSD手册页提供了有关这些标头的详细文档,从而可以通过编程方式控制PF。PF包含在OSX内核中,即使默认情况下它是禁用的。

我知道这是可以控制PF在OSX好歹,因为像应用Murus存在,这种低级别提供用户友好的GUI“防火墙之王”,而这个API是不是没有手动/etc/pf.conf解析,我首先怀疑。

有什么方法可以从OSX应用程序添加这些标头并控制PF?

MacOS Sierra 10.12.6

Xcode 9.2(9C40b)

更新我发现的一些信息,虽然有些过时

macos bsd firewall darwin

5
推荐指数
1
解决办法
71
查看次数

XPath - 基于多个子选择选择父节点

让我们看看这样的XML

<bookshelf>
  <cathegory name = "Programming" />
  <book name = "Tille 1" >
    <author>....</author>
  </book>
  <book name = "Tille 2" >
    <author>....</author>
    <translator></translator>
  </book>
  <book name = "Tille 3" >
    <author>....</author>
    <translator>John D.</translator> <!-- non-empty nodes are acceptred! -->
  </book>
</bookshelf>
Run Code Online (Sandbox Code Playgroud)

我们如何选择书架具有cathegory与节点的名称属性和至少一个与非空的转换节点?

基本的XPath教程没有提供如此复杂的示例.

xpath

4
推荐指数
1
解决办法
5005
查看次数

架构x86_64的未定义符号:OS X,Boost Log,CMake

链接的另一个问题

OS X 10.9.5 x64

跨平台项目正在使用CMake工具链构建.使用提升.

将所有可执行文件与Boost日志链接时出错(肯定找到BOOST_PATH,单元测试链接与Boost测试成功)

第一次尝试.使用Clang

gcc -v
Apple LLVM version 6.0 (clang-600.0.56) (based on LLVM 3.5svn)
Target: x86_64-apple-darwin13.4.0
Thread model: posix
Run Code Online (Sandbox Code Playgroud)

建设提升

./bootstrap &&  ./b2 threading=multi link=static runtime-link=static install
Run Code Online (Sandbox Code Playgroud)

顺利完成

...updated 638 targets...
Run Code Online (Sandbox Code Playgroud)

链接说明:

if( ("UNIX") AND ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") )

    # using Clang
    message("UNIX configuration, Clang")
    set(CMAKE_CXX_FLAGS "-std=c++11")
    set(CMAKE_EXE_LINKER_FLAGS "-std=c++11 -Wl")
Run Code Online (Sandbox Code Playgroud)

将库链接到可执行文件

add_executable(${TARGET} ${SOURCES})
if( ("UNIX") AND ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") )

    # using Clang
    message("UNIX configuration, Clang")
    target_link_libraries(${TARGET}
        libhelpers.a
        libopenvpn_manager.a
        ${Boost_LOG_LIBRARY}
        ${Boost_LOG_SETUP_LIBRARY}
        ${Boost_SYSTEM_LIBRARY}
        ${Boost_FILESYSTEM_LIBRARY})
Run Code Online (Sandbox Code Playgroud)

生成makefile:

cmake …
Run Code Online (Sandbox Code Playgroud)

c++ linker boost cmake clang

4
推荐指数
1
解决办法
8177
查看次数

保存电子邮件附件(python3,pop3_ssl,gmail)

我正在尝试从Google邮件帐户保存电子邮件附件.

AFAIK,它可以完成"行走"消息并获取其有效载荷,

for part in message.walk():
    # getting payload, saving attach etc.
Run Code Online (Sandbox Code Playgroud)

但它不起作用.请参阅以下整个示例:

def test_save_attach(self):
    self.connection = poplib.POP3_SSL('pop.gmail.com', 995)
    self.connection.set_debuglevel(1)
    self.connection.user(USERNAME)
    self.connection.pass_(PASS)

    emails, total_bytes = self.connection.stat()
    print("{0} emails in the inbox, {1} bytes total".format(emails, total_bytes))
    # return in format: (response, ['mesg_num octets', ...], octets)
    msg_list = self.connection.list()
    print(msg_list)

    # messages processing
    for i in range(emails):
        response = self.connection.retr(i+1)
        # return in format: (response, ['line', ...], octets)
        lines = response[1]
        str_message = email.message_from_bytes(b''.join(lines))
        print(str_message)

        # save attach
        for part in str_message.walk(): …
Run Code Online (Sandbox Code Playgroud)

python email gmail pop3 python-3.x

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

CMake Visual Studio项目依赖项

我的解决方案包含一个静态库和一个使用它的控制台应用程序.该解决方案是从CMakeLists.txt文件生成的(顶级文件和每个项目的两个文件)我知道CMake中的项目依赖项是通过更改add_subdirectory()顺序来管理的.但是,它对我不起作用

提供完整的顶级文件

cmake_minimum_required(VERSION 2.8)
project(vtun CXX)
set(TARGET vtun)

set(Boost_DEBUG ON)
set(Boost_USE_STATIC_LIBS ON)
set(BOOST_ROOT ${MY_BOOST_DIR}) 

find_package(Boost 1.55.0) 

if(NOT Boost_FOUND)
  message(FATAL_ERROR "Boost libraries are required")
endif()

add_subdirectory(vtunlib)
add_subdirectory(console_client)
Run Code Online (Sandbox Code Playgroud)

vtunlib项目是第一个,但无论如何*.sln文件不包含依赖项信息,并且始终首先构建console_client

CMake 3.0,Visual Studio 2013

cmake visual-studio-2013

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

Python argparse:增加参数和描述之间的空间

我将Python3 argparse用于复杂的命令行界面。为了避免误解,有很多论点,其中一些是“冗长的”。

parser = argparse.ArgumentParser(description='Command-line interface')
parser.add_argument('--long-param-one',
                    help='Long param one description',
                    dest='lond_param_one',
                    required=True)

parser.add_argument('--long-param-two',
                    help='Long param two description',
                    dest='lond_param_two',
                    required=True)
Run Code Online (Sandbox Code Playgroud)

当参数名称足够长而目标变量也足够长时,当您使用以下命令调用脚本时,它将导致格式难看 --help

Command-line interface

optional arguments:
  -h, --help            show this help message and exit
  --long-param-one LONG_PARAM_ONE
                        Long param one description
  --long-param-two LONG_PARAM_TWO
                        Long param two description
Run Code Online (Sandbox Code Playgroud)

我的意思是,参数和值在一个字符串上,描述在另一个字符串上,即使控制台右侧有足够的空间将其放在一行中。就像第一个参数--help一样。当您有30-40个参数时,命令行帮助的可读性确实变差了

python argparse python-3.x

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

使用CMake对boost :: iostreams :: mapped_file_source :: init()进行未定义的引用

将最小示例上的错误与Boost Iostreams链接起来.看起来我还没有与libboost_iostream链接,但是CMake报告找到了库,并且Boost的其他应用程序编译和链接没有任何问题.

使用Cmake进行构建:

cmake_minimum_required(VERSION 3.0)
project(mmap_example CXX)
set(TARGET mmap_example)

set(BOOST_MIN_VERSION "1.61.0")
set(Boost_ADDITIONAL_VERSIONS "1.61.0" "1.61")
set(Boost_USE_STATIC_LIBS ON)
set(BOOST_ROOT ${MY_BOOST_DIR})

find_package(Boost ${BOOST_MIN_VERSION} COMPONENTS iostreams REQUIRED)

set(CMAKE_CXX_FLAGS "-std=c++11 -std=gnu++1y -pthread")
set(CMAKE_EXE_LINKER_FLAGS "-std=c++11 -std=gnu++1y -pthread")

file(GLOB SOURCES *.cpp)

include_directories(${Boost_INCLUDE_DIRS}) 

add_executable(${TARGET} ${SOURCES})

target_link_libraries(${TARGET} ${Boost_IOSTREAMS})
Run Code Online (Sandbox Code Playgroud)

C++本身:

#include <boost/iostreams/device/mapped_file.hpp>

namespace boost_io = boost::iostreams;

int main(int argc, char** argv) {

    boost_io::mapped_file_source file(argv[1]);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

GCC输出:

Linking CXX executable mmap_example CMakeFiles/mmap_example.dir/mmap.cpp.o: In function boost::iostreams::mapped_file_source::mapped_file_source<char*>(char* const&, unsigned int, long long): mmap.cpp:(.text._ZN5boost9iostreams18mapped_file_sourceC2IPcEERKT_jx[_ZN5boost9iostreams18mapped_file_sourceC5IPcEERKT_jx]+0x43): undefined reference to boost::iostreams::mapped_file_source::init()

gcc(Debian 4.9.2-10)4.9.2

Cmake 3.0.2 …

c++ cmake boost-iostreams

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

Git致命:遇到ArgumentNullException

我在尝试推送到Github存储库时收到以下错误。我在Windows上工作,仓库在GitHub上。

凭据管理器似乎存在一些问题,因为在错误消息之后,再次请求了凭据,我仍然可以推送更改,但是错误确实令人讨厌。

我知道GitHub不再支持TLS 1.0和1.1,仅支持1.2,这就是为什么我将Windows更新到最新版本的Git的原因:

git --version
git version 2.17.0.windows.1
Run Code Online (Sandbox Code Playgroud)

但是,它并没有太大帮助

更新:详细的STR

git commit --all -m"#ISSUE-123 Rename example dirs; added command-line handlers"
22 files changed, 501 insertions(+), 7 deletions(-)
git push https://<my_username>@github.com/<my_repo>.git #ISSUE-123
fatal: ArgumentNullException encountered.
Value cannot be null.
Parameter name: path
Run Code Online (Sandbox Code Playgroud)

当然,路径和用户名是100%正确的

git github git-for-windows

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