小编Mar*_*ata的帖子

在函数签名中抛出关键字

throw在函数签名中使用C++ 关键字被认为是不良做法的技术原因是什么?

bool some_func() throw(myExc)
{
  ...
  if (problem_occurred) 
  {
    throw myExc("problem occurred");
  }
  ...
}
Run Code Online (Sandbox Code Playgroud)

c++ exception

185
推荐指数
6
解决办法
13万
查看次数

0.1浮点数大于0.1双.我以为它是假的

让:

double d = 0.1;
float f = 0.1;
Run Code Online (Sandbox Code Playgroud)

应该表达

(f > d)
Run Code Online (Sandbox Code Playgroud)

回来true还是false

根据经验,答案是true.但是,我期待它false.

0.1不能在二进制完美表示,而双具有1516十进制精度位数,并且浮体具有只7.所以,他们两个都不到0.1,而双人更接近0.1.

我需要一个确切的解释true.

c c++ floating-point double rounding

100
推荐指数
5
解决办法
8537
查看次数

如何在C或C++中创建单个实例应用程序

为了创建单个实例应用程序,您的建议是什么,以便一次只允许一个进程运行?文件锁,互斥还是什么?

c c++ linux single-instance

52
推荐指数
5
解决办法
3万
查看次数

如何使用Reflection创建C#数组并仅键入info?

我无法弄清楚如何使这项工作:

object x = new Int32[7];
Type t = x.GetType();

// now forget about x, and just use t from here.

// attempt1 
object y1 = Activator.CreateInstance(t); // fails with exception

// attempt2
object y2 = Array.CreateInstance(t, 7);  // creates an array of type Int32[][] ! wrong
Run Code Online (Sandbox Code Playgroud)

什么是秘诀?如果我能得到数组元素的类型,我可以使第二个工作,但我也没有想到那个.

c# arrays reflection constructor

42
推荐指数
2
解决办法
3万
查看次数

如何在编译时在CMake生成的Makefile中运行命令?

我想将一些选项传递给编译器.该选项必须在编译时计算 - 每次调用'make'时,而不是'cmake',因此execute_process命令不会删除它.(可以?)

例如,将日期传递给g ++编译器,如下所示:

g++ prog.cpp -o prog -DDATETIME="17:09:2009,14:25"
Run Code Online (Sandbox Code Playgroud)

但是在编译时计算DATETIME.

知道如何在CMake中做到这一点吗?

赏金编辑:

最不受欢迎的解决方案将被接受.

请注意,我希望能够在编译时执行任意命令,而不仅仅是'date'.

编辑2:

它必须适用于Linux,Windows(VS),Mingw,Cygwin和OS X.您不能假设Ruby,Perl或Python,因为它们在Windows上是非标准的.你可以假设BOOST,但我想这没用.

目标是强制cmake生成Makefile(在Linux的情况下),当make执行时,将完成工作.

创建自定义*.h文件是可以的,但它必须由make的Makefile(或其他操作系统上的等效文件)启动.*.h的创建不必(也不应该)使用cmake.

build-process cmake pre-compilation

33
推荐指数
2
解决办法
4万
查看次数

后台的Linux进程 - 在工作中"停止"?

我目前正在运行带有&标志的流程.

$ example &
Run Code Online (Sandbox Code Playgroud)

然而,(请注意我是Linux的新手)我意识到在这样的命令之后差不多一秒钟我得到一个注释,我的进程收到一个停止的信号.如果我做

$ jobs
Run Code Online (Sandbox Code Playgroud)

我将使用我的示例流程获取列表,并附上一个"停止"的小注释.它真的停了下来而且根本没有工作吗?它是如何工作的?我从互联网上获得了混合信息.

linux bash

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

确定两个文件路径引用同一文件对象的最佳方法是什么?

我想编写一个单元测试来检查两个文件路径是否相同,但我不想假设字符串表示是相同的.

例如,在Linux上,一个案例中的路径中可能存在符号链接,而另一个案例中则不存在符号链接.在Windows上,一个(X:\foo)上可以有驱动器表示法,另一个()上可以有网络符号//serverX/foo.最复杂的是,该文件可能已在Linux上以NFS共享(/path/to/file语法)编写,并在Windows上使用DOS语法验证(X:\to\file)其中X:是NFS挂载/path.

一些想法(在Stack Overflow上找到,但不统一):

  1. 在Linux上,比较来自的inode stat
  2. 使用realpath(这个平台独立吗?)
  3. 在Windows上,比较字符串 GetFullPathName
  4. 在Windows上,比较序列号和文件索引 GetFileInformationByHandle

什么是跨平台的最佳解决方案?我用C++写这个,但我可以明显地下降到C.

c c++ linux windows

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

TortoiseGit Git Sync和Pull之间的区别?

我来自SVN环境,我正在用TortoiseGit探索Git.

当我右键单击"签出"的Git存储库时,我可以执行Git Sync命令,也可以执行Pull命令.

这两个函数之间有什么区别?

git sync git-pull tortoisegit

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

add_custom_command未生成目标

也许这是不可能的,我误读了cmake 3.2文档,但我创建一个自定义命令会在Makefile中创建一个自定义"目标",这样我就可以通过调用输出文件的名称来构建目标.CMake文档说:

在makefile术语中,这将以下列形式创建一个新目标:

 OUTPUT: MAIN_DEPENDENCY DEPENDS
    COMMAND
Run Code Online (Sandbox Code Playgroud)

所以我想我可以跑了make OUTPUT.也许文档将CMake目标与Makefile目标混淆了?

例如,

 add_custom_command(OUTPUT foo_out
    COMMAND post_process foo_in > foo_out
    DEPENDS foo_in
 )
Run Code Online (Sandbox Code Playgroud)

我想要做

 make foo_out
Run Code Online (Sandbox Code Playgroud)

它会使foo_out.但是,如果我这样做,我明白了

make: **** No rule to make target `foo_out`. Stop.
Run Code Online (Sandbox Code Playgroud)

果然,cmake二进制输出目录中的任何文件中都不存在"foo_out"这个词.如果我把它改成这个

add_custom_target(bar DEPENDS foo_out)
add_custom_command(OUTPUT foo_out COMMAND post_process foo_in > foo_out)
Run Code Online (Sandbox Code Playgroud)

然后我就能做到

make bar
Run Code Online (Sandbox Code Playgroud)

我能做到

make foo_in
Run Code Online (Sandbox Code Playgroud)

但我还是做不到

make foo_out
Run Code Online (Sandbox Code Playgroud)

问题make bar是它不直观,因为实际的文件输出foo_out不是bar.

我该怎么做呢?

在我的例子中,我需要对标准可执行目标运行一个特殊的处理步骤,该目标将可选资源插入到ELF文件中.我希望能够将两个可执行文件作为Makefile目标,因此我可以构建裸ELF可执行文件以及注入资源的ELF可执行文件.

如果我正在编写自定义Makefile,这很简单!

foo_in: foo.c
    $(CC) $< -o $@

foo_out: foo_in
    post_process $< …
Run Code Online (Sandbox Code Playgroud)

cmake add-custom-command

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

解析WiFi数据包(libpcap)

我一直在研究如何让一个OpenWRT路由器记录WiFi探测请求到MySQL数据库(它存储每个探测请求数据包的MAC地址和RSSI信息以及其他特定于路由器的数据).

在研究了libpcap之后,我已经能够拼凑出一个基本的小程序,只需使用过滤器表达式('wlan subtype probe-req')在监视器接口(mon0)上嗅探数据包,然后输出原始数据包十六进制 有了libpcap在线提供的信息,这部分相当简单.

现在我就陷入困境:如何解析WiFi数据包以检索我正在寻找的信息(RSSI和源MAC地址)?

要说清楚,我不是要求代码去做(虽然我不会抱怨,如果你想提供一些:D).我只是在寻找某种指导来理解哪个字节是哪个 - 如果你愿意的话,那就是WiFi数据包路线图.

有一些很好的教程可用于解析通过以太网进入的数据包,但是我无法找到任何可以帮助解析与WiFi特定相关的标头.我假设这将是一个非常简单的过程 - 只需抓取RSSI和源MAC的相关字节 - 但同样,我还没有找到任何关于哪个字节的文档.

我知道这已经完成了,但我会说实话:在查看tcpdump的源代码时,我完全迷失了.

那么,有没有人知道如何解析WiFi数据包的良好资源?

干杯

编辑:更具体的答案

RSSI位于RadioTap标题中(嗯,在Linux上).使用radiotap-parser.c以及它所依赖的文件(在与我链接的文件相同的目录中找到)将RSSI从数据包中拉出是相当简单的.如果有人在使用radiotap-parser.c时遇到问题,请随时与我们取得联系.

radiotap函数使得拉出源MAC地址非常简单,因为radiotap头结构包含radiotap头(it_len)的长度,它是可变的.因为我只解析具有固定长度的探测请求(在这里查看第17页),所以只需要指向一个指针packet + it_len + 10(源MAC地址在MAC帧开始后10个字节开始,从哪里开始) radiotap标题结束).从该指针开始的6个字节addr2位于802.11帧中(同样,请参见此处的第17页).

c parsing packet wifi libpcap

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