我有一个小程序执行零浮点除法,所以我期待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类型等)?
谢谢
我有简单的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)
它工作正常,但脚本在写入所有输出文件之前完成其工作.实际上,我获得了数百个零大小的文件,并且完成编写输出和关闭句柄需要一些时间.任何人都可以解释为什么它的工作如此奇怪,是否有同步方式来做同样的工作?
谢谢
让我们看看这样的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教程没有提供如此复杂的示例.
链接的另一个问题
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) 我正在尝试从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) 我的解决方案包含一个静态库和一个使用它的控制台应用程序.该解决方案是从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
我将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个参数时,命令行帮助的可读性确实变差了
将最小示例上的错误与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 …
我在尝试推送到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%正确的