小编smc*_*dow的帖子

Linux:为什么sig_atomic_t typedef'ed为int?

在我的Linux机器上,sig_atomic_t是一个普通的老int.是否ints具有特殊的原子质量?

$ gcc -v
Using built-in specs.
Target: x86_64-linux-gnu
...
Thread model: posix
gcc version 4.3.2 (Debian 4.3.2-1.1) 

$ echo '#include <signal.h>' | gcc -E - | grep atomic
typedef int __sig_atomic_t;
typedef __sig_atomic_t sig_atomic_t;
Run Code Online (Sandbox Code Playgroud)

c linux signals

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

如何确定代码是否在信号处理程序上下文中运行?

我刚刚发现有人正在调用 - 从信号处理程序 - 一个绝对不是我编写的异步信号安全函数.

所以,现在我很好奇:如何避免这种情况再次发生?我希望能够轻松确定我的代码是否在信号处理程序上下文中运行(语言是C,但解决方案不适用于任何语言吗?):

int myfunc( void ) {
    if( in_signal_handler_context() ) { return(-1) }
    // rest of function goes here
    return( 0 );
}
Run Code Online (Sandbox Code Playgroud)

这是在Linux下.希望这不是一个简单的答案,否则我会觉得自己像个白痴.

linux signals handler

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

如何使用cmake"安装目录"指令保留文件权限?

Prolog:我在文档中错过了这个,我是个白痴

cmake的-2.8.10.2

安装目录时如何使cmake保留原始文件权限?对于手头的项目,我希望它基本上将一些目录从我的源代码树复制到安装树.以机智:

install(
  DIRECTORY config runp
  DESTINATION ${CMAKE_INSTALL_PREFIX}
  PATTERN ".svn" EXCLUDE
  PATTERN ".git" EXCLUDE
  PATTERN "start_collection.snl" EXCLUDE
)
Run Code Online (Sandbox Code Playgroud)

所有工作都按预期工作 - 除了使用不正确的文件权限复制可执行脚本.实际上,没有保留原始文件权限.使用FILE_PERMISSIONS和DIRECTORY_PERMISSIONS全局设置权限是我不想做的事情,坦率地说,在这种情况下会是一个黑客.

在shell脚本世界中,我会做一些像这样简单的事情:

for i in config runp ; do
  tar cf - $i | tar -C $CMAKE_INSTALL_PREFIX -xf -
done
Run Code Online (Sandbox Code Playgroud)

directory install file-permissions cmake preserve

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

operator ==()使用模板模板


编辑:Prolog:我是我自己的无知和深夜编码的受害者.


我正在使用模板模板编写模板化的类.它有一个迭代器,这意味着我需要提供一个适当的模板operator==().这是我遇到麻烦的地方.

代表性代码示例如下:

#include <iostream>
#include <typeinfo>

using namespace std;

namespace detail {
  template <typename T> class foo {};
  template <typename T> class bar {};
}

template <template<class> class A, template<class> class B>
struct basic_thing {
  template <typename T> using target_type = A<B<T>>;

  target_type<float> fmember;
  target_type<int>   imember;

  struct iterator {
    bool equal (const iterator& other) { return true; }
  };

  iterator begin () { return iterator{}; }
  iterator end   () { return iterator{}; }
};

template <template<class> …
Run Code Online (Sandbox Code Playgroud)

c++ templates c++11

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

标签 统计

linux ×2

signals ×2

c ×1

c++ ×1

c++11 ×1

cmake ×1

directory ×1

file-permissions ×1

handler ×1

install ×1

preserve ×1

templates ×1