小编Mar*_*ata的帖子

如何在Linux下为socket生成随机文件名?

我想制作一个使用本地命名空间套接字的小程序,我需要使用临时文件名作为套接字的地址.

那么如何在Linux下生成随机文件名呢?

+我在Debian Linux下使用C编程语言.
+根据GNU C库参考,tmpname是不安全的.但安全的tmpfile和mkstemp 创建打开生成的文件.这里有任何安全非创建 - 打开.换句话说,该函数应禁止任何其他请求在特定目录下创建生成的文件名.

谢谢.

c sockets linux random

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

如何在C++中使用openssl crypto lib头文件?

我正在尝试测试openssl附带的加密库,我从http://www.openssl.org/source/下载了openssl ,它包含一个/ crypto文件夹,其中包含每个加密类型的子文件夹.

我想尝试BIO_f_base64,所以我创建了一个空的控制台应用程序,并添加了所需的包含,还添加了/ bio和/ evp文件夹到c ++ incl目录的路径,还添加了main/openssl文件夹.

当我尝试编译时,我得到无法打开包含文件:'openssl/e_os2.h':没有这样的文件或目录

但文件在那里,我应该以不同的方式使用加密库吗?我如何使用它只添加/ openssl路径而不是我使用的所有加密子文件夹?

此外,我没有任何.lib文件,我在哪里可以得到它们?

c++ openssl cryptography visual-c++

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

DataGridView选择所有单元格,行标题和列标题进行复制

.SelectionModeDataGridView让你选择所有单元格和行标题,或所有的细胞和列标题,但我无法弄清楚如何让用户选择的一切,包括行标题和列标题在同一时间.

我想让用户能够将整个表格(包括列标题)复制并粘贴到另一个文档中,如文本或格式化文本,如Word或电子邮件.它开箱即用,除了你不能得到列标题.

.net c# datagridview winforms

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

将一组nullables复制到相同基类型的非nullables数组的有效方法?

有没有一种有效的方法将一组nullables(比方说byte?[])复制到一个非nullables数组(比方说byte[]),假设源数组保证没有任何nullables(如果确实如此,可以抛出异常)?显然,我可以遍历索引并单独复制每个元素.

这不起作用.它编译,但ArrayTypeMismatchException在运行时抛出.

 byte?[] sourceNullable = new byte?[]{1,2,3};
 byte[] destNonNullable = new byte[3];

 Array.Copy(sourceNullable,destNonNullable,3);
Run Code Online (Sandbox Code Playgroud)

这会有效但我正在寻找"更好"的东西

for(int i=0;i<3;i++) {
    destNonNullable[i] = sourceNullable[i] ?? 0;
}
Run Code Online (Sandbox Code Playgroud)

我愿意接受答案:显式循环有什么问题?你为什么要浪费时间来优化这个?:)


编辑:我尝试使用Linq样式Cast<>(),但事实证明要慢得多.我的代码的时间摘要如下:

for loop = 585 ms

Linq Cast = 3626毫秒

输入image文件是稀疏数组,填充了空值部分.

        uint rowsize = 16;
        Stopwatch sw = new Stopwatch();
        sw.Start();
        for (UInt32 address = start & 0xFFFFFFF0; address <= last; address += rowsize)
        {
            Int32 imageOffset = (Int32)(address - start);
            Int32 maxRowLen = (int)rowsize;
            if …
Run Code Online (Sandbox Code Playgroud)

c# arrays nullable

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

如何获取异常的完整路径名,以便我可以添加异常处理程序

我想捕获一个异常,但我不知道它的完全限定名称。我想在不通过文档挖掘的情况下通过实验弄清楚。

假设我有这样的代码

try:
   blackbox()
except Exception,e:
   print str(e)
   print e.__class__.__name__
Run Code Online (Sandbox Code Playgroud)

它运行,我收到一条异常消息,上面写着

"error: too big"
error
Run Code Online (Sandbox Code Playgroud)

所以我添加了一个处理程序

try:
   blackbox()
except error,e:
   pass
except Exception,e:
   print str(e)
   print e.__class__.__name__
Run Code Online (Sandbox Code Playgroud)

但它不起作用,因为error不在当前命名空间中。(我知道这个特定问题的答案,它恰好是curses.error)。我如何找出异常对象的命名空间(即curses.我可以为该异常添加处理程序?

python exception-handling

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

无法使用 SFINAE (std::enable_if) 覆盖虚函数

下面的代码virtual A::foo()B::foo() override. 如果BROKEN没有定义,那么它编译就好了。我对std::enable<std::is_pod<Q>::value>::type恶作剧的理解是它有效地替换了 SFINAE 表达式void,这应该与普通的void.

但是,它不会编译。我收到编译器错误:

英特尔编译器(icpc):

$ make a CXXFLAGS="-std=c++11 -DBROKEN"
icpc -std=c++11 -DBROKEN    a.cpp   -o a
a.cpp(24): error: object of abstract class type "B<int>" is not allowed:
            pure virtual function "A::foo" has no overrider
     B<int> b;
            ^
Run Code Online (Sandbox Code Playgroud)

海湾合作委员会:

$ make a CXXFLAGS="-std=c++11 -DBROKEN" CXX=g++
g++ -std=c++11 -DBROKEN    a.cpp   -o a
a.cpp: In function ‘int main()’:
a.cpp:24:11: error: cannot declare variable ‘b’ to be of abstract …
Run Code Online (Sandbox Code Playgroud)

virtual sfinae c++11

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

相当于整数的#define的C++

我正在寻找#define以下代码中的便携式一行替代品.替换应该隐藏对象APPLE命名空间中的单词Foo.

class Foo {
public:
#define APPLE 123
    Foo(int a) : a_(a) { }
};

 // elsewhere in another file
    Foo f(APPLE);
Run Code Online (Sandbox Code Playgroud)

我试图使这个更加C++友好,它使用英特尔2017编译器:

class Foo {
public:
    static constexpr int APPLE = 123;
    Foo(int a) : a_(a) { }
};

// elsewhere

    Foo a(Foo::APPLE);
Run Code Online (Sandbox Code Playgroud)

但它不适用于g ++((GCC)6.3.1 20170216),因为它给出了错误

undefined reference to Foo::APPLE
Run Code Online (Sandbox Code Playgroud)

因为它可能试图引用APPLE.

我知道我可以通过在*.cpp文件中创建定义来"解决"问题

constexpr int Foo::APPLE;
Run Code Online (Sandbox Code Playgroud)

但这违反了我#define被1线替换的理想.我的Foo类只是头文件,现在我需要一个cpp文件来定义Foo::APPLE.我知道我也可以将APPLE声明为函数(static constexpr int APPLE() {return …

c++ c++14

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

如何让Xilinx XST与我的设计中的网络合并?

我问并回答这个问题,以便将来再找到它...

如何让XST不要将两个逻辑上等效的网络合并为一个(这通常是节省资源的好主意,但从时序视图来看可能不是一个好主意)?

我有一个设计有2个计数器,由相同的clk驱动.XST将计数器的最低位合并为一个计数器,但这是一个问题,因为由于IOB放置约束,计数器需要在设计中分开.我需要计数器(特别是计数器的最低位)是不同的.

verilog vhdl xilinx

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

如何包装对`std :: thread`构造函数的调用?(适用于gcc,VS和icpc)

原帖(有错误)

我想包装一个对std :: thread构造函数的调用(以跟踪所有运行的线程,以便我可以加入它们或做其他事情).在此示例中,t1线程正确构造,但t2线程不使用gcc 4.8.1.但是,在Windows(VS2012)上,它编译时没有错误,并且运行没有错误.基于此处的讨论,这似乎是gcc中的一个错误,但可以说它实际上是VS中的一个错误.这样做的正确方法是什么?

#include <iostream>
#include <thread>

class A {
public:
    void foo(int n ) { std::cout << n << std::endl; }
};

template<class F, class Arg>
std::thread& wrapper(F&& f, Arg&& a)
{
   std::thread* t = new std::thread(f,a,100);
   return *t;
}

int main()
{
    A a;

    std::thread t1(&A::foo, &a, 100);
    t1.join();

    std::thread t2 = wrapper(&A::foo, &a);
    t2.join();

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这是编译器错误

-bash-4.1$ make
g++ -std=c++11    main.cpp   -o main
main.cpp: In function ‘int …
Run Code Online (Sandbox Code Playgroud)

c++ icc c++11 stdthread

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

如何在HDF5中编写固定长度的字符串?

我有一些C++代码调用HDF5 C API来写出固定长度的字符串.由于某种原因,结果是总垃圾.以下是h5dump的示例:

DATASET "simple" {
   DATATYPE  H5T_STRING {
      STRSIZE 10;
      STRPAD H5T_STR_NULLTERM;
      CSET H5T_CSET_ASCII;
      CTYPE H5T_C_S1;
   }
   DATASPACE  SIMPLE { ( 100 ) / ( 100 ) }
   DATA {
   (0): "\001\026", "", "\37777777635\177", "", "y\026", "",
   (6): "\37777777635\177", "", "\37777777761\026", "",
   (10): "\37777777635\177", "", "i\027", "", "\37777777635\177", "",
   (16): "\37777777741\027", "", "\37777777635\177", "", "Y\030", "",
   (22): "\37777777635\177", "", "\37777777721\030", "",
   (26): "\37777777635\177", "", "I\031", "", "\37777777635\177", "",
   (32): "\37777777701\031", "", "\37777777635\177", "", "9\032", "",
Run Code Online (Sandbox Code Playgroud)

但是,如果我将大小更改为H5Tset_size (datatype_id, H5T_VARIABLE); …

c hdf5

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