小编Gui*_*i13的帖子

make write()破解而不写入文件desc?

我的应用程序中有这个线程监视一组客户端套接字.我select()用来阻止,直到客户端发出请求,这样我就可以有效地处理它而不会增加线程.

现在,问题是,当我将新客户端添加到客户端列表时,我必须等待select()(设置为10秒)的超时以实际将新套接字添加到已侦听的套接字.

所以我想在超时之前进行select()破解,以便可以立即收听客户端.

我已经有了一个解决方案:创建一个我总是包含在我的侦听套接字列表中的虚拟套接字对,并且我在其中编写以进行select()破解,但我希望有更好的解决方案.

编辑:我无法访问,eventfd()因为我使用的GLIBc太旧了(我无意更新它).所以我可能不得不使用fifo或socket.

你知道任何?

谢谢!

c select timeout

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

std :: map,polymorphism和delete

我有一个问题,使用C++映射来存储指向基类和一些派生类的指针.

让我用一个相当长但很简单的代码来解释:

#include <map>
#include <iostream>

struct foo{ int dummy[4]; };
struct bar{ int additionnal[4]; };

class Base
{
private:
    struct foo *_internal_structure;
public:
    Base() { _internal_structure = new struct foo; }
   ~Base()
   {
        delete _internal_structure;
        std::cout << "Base DTOR\n";
   }
};

class Derived: public Base
{
private:
    struct bar *_additional_structure;
public:
    Derived() { _additional_structure = new struct bar; }
   ~Derived()
   {
        delete _additional_structure;
        std::cout << "Derived DTOR\n";
   }
};


int main(int argc, char *argv[])
{
    std::map<int, Base*> my_map;
    Base …
Run Code Online (Sandbox Code Playgroud)

c++ polymorphism dictionary rtti delete-operator

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

_IO_wide_data_2:这是什么?

我正在开发一个嵌入式平台(架构是SH4),几分钟前我的程序用SIGABRT崩溃了.

幸运的是,我在gdbserver下运行,被这个信号中断的线程有这个堆栈转储:

#0  0x2a7f1678 in raise () from /home/[user]/target/lib/libc.so.6
#1  0x2a7f2a4c in abort () from /home/[user]/target/lib/libc.so.6
#2  0x2a81ade0 in __libc_message () from /home/[user]/target/lib/libc.so.6
#3  0x2a81f3a8 in malloc_printerr () from /home/[user]/target/lib/libc.so.6
#4  0x2a8c3700 in _IO_wide_data_2 () from /home/[user]/target/lib/libc.so.6
Run Code Online (Sandbox Code Playgroud)

你知道这里发生了什么吗?一个糟糕的免费()?坏删除?不好malloc?什么是"_IO_wide_data_2"应该做什么?我看到malloc_printerr()调用我也不明白.

谷歌给了我234个结果,但所有这些都只是因为这些人在他们的回溯中有"功能".

c c++ debugging gdb

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

什么是(void(**)())以及如何键入它?

在我必须理解的嵌入式代码中,有这一行代码:

*((void (**) ()) 0x01) = c_int01; /* Write the interrupt routine entry */
Run Code Online (Sandbox Code Playgroud)

我可以掌握使用函数指针设置中断向量这一事实c_int01,但我无法确定哪种类型的强制转换(void (**) ())引用.我知道标准函数指针表示法,(void (*)())但不知道另一个.

我试图重构代码,使它看起来更像这样:

// header
typedef void (*interrupt_handler)(); // prototype of an interruption handler
#define INTERRUPT_VECTOR 0x01
#define SET_INTERRUPT_HANDLER( handler ) *((interrupt_handler) INTERRUPT_VECTOR) = (handler)

// code
SET_INTERRUPT_HANDLER( c_int01 );
Run Code Online (Sandbox Code Playgroud)

但嵌入式编译器抱怨LHS不是一个对象.

有谁知道这个符号表示什么? (void (**)())

//编辑:

对于那些感兴趣的人,我会更好地理解这一点:

*( (void (*)())* 0x01) = c_int01;
Run Code Online (Sandbox Code Playgroud)

c typedef function-pointers interrupt

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

Java8:通过连接值将Map <String,List <String >>转换为Map <String,String>

我有一个Map<String, List<String>>我想转换成a Map<String, String>,结果的值将是String.join(" - ", values)第一个map的值.

我知道如何这样做:

public Map<String,String> flatten( Map<String, List<String>> attributes) {
      Map<String, String> map = new HashMap<>();
      attributes.forEach((k,v) -> map.put( k, String.join(" - ", v)));
      return map;
}
Run Code Online (Sandbox Code Playgroud)

但我想摆脱new HashMap<>()并直接对输入进行转换.
我怀疑,collect(Collectors.groupingBy( something ) )但我无法弄清楚如何.
我想要的是这样的:

public Map<String,String> flatten( Map<String, List<String>> attributes) {
    return attributes.entrySet().stream().<something>;
}
Run Code Online (Sandbox Code Playgroud)

我该怎么办?

java java-stream

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

选择什么作为C的好标记?

所以,我想知道在C中是否有一个好的标记可供选择,除了普通的0xDEADBEEF或不太吸引人的(对于正确的代码)0x0BADA550.

你最喜欢的是什么?有没有理由选择一个或另一个特定值?

c marker

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

Jenkins 多分支:更改 Groovy 的工作描述

我在 Jenkins 中的多分支项目工作正常,但我想将工作描述(默认情况下为“完整项目名称:xxxx/”)修改为更有意义的内容。

我可以使用执行currentBuildmy 时可用的变量轻松更改构建描述Jenkinfile,但我不知道如何修改父作业描述。

我的用例是,我的存储库的每个分支都有一个关联的容器,该容器在完成时使用最新版本进行更新。因此,我的多分支项目中的每个作业都有其容器和 Web URI,我想将其放入作业描述中。

这可能吗?

git groovy jenkins

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

多次调用 C 预处理器宏(通过变量)

我想清理我的汇编代码并提供一种通过宏多次调用“NOP”的方法:

#define NOP() asm(" nop")

#define NOP_N( N ) \
    NOP(); \
    NOP(); \
    .... call NOP() N times
Run Code Online (Sandbox Code Playgroud)

我无法确定这在宏中是否可行。

显然,出于性能原因,我不想要这样的东西:

#define NOP_N( n ) { register int i; for(i=0;i<n;i++) asm(" nop"); }
Run Code Online (Sandbox Code Playgroud)

这违背了 NOP 的目的:

L17:                                    ; NOP_N(3);
        nop
        addi      1,r0                  ; Unsigned
        cmpi      3,r0
        blo       L17
Run Code Online (Sandbox Code Playgroud)

代码是C和汇编语言,所以这里不能涉及C++。此外,编译器相当陈旧,不支持可变参数宏......

c macros assembly

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

在Javascript中展平和合并对象数组的数组

这是我的意见:

var toto=[
    [
        { "a": "24" },
        { "a": "23.9"},
        { "a": "NaN"},
        { "a": "3" }
    ],
    [
        {"b": "19"},
        {"b": "20"},
        {"b": "NaN"},
        {"b": "3" }
    ],
    [
        {"c": "27"},
        {"c": "28"},
        {"c": "NaN"},
        {"c": "3" }
    ]
];
Run Code Online (Sandbox Code Playgroud)

保证所有对象数组包含相同数量的对象.

我想在输出中获得:

var out =  [
        { "a": "24", "b": "19", "c":"27" },
        { "a": "23.9", "b": "20", "c":"28"},
        { "a": "NaN", "b": "NaN", "c":"NaN"},
        { "a": "3", "b": "3", "c": "3"}
    ]
Run Code Online (Sandbox Code Playgroud)

也就是说,对于每个内部数组,取第N个元素并将其合并到一个对象中,然后将其推入结果数组中.

我有一个"braindead"解决方案,它在第一个子数组上迭代,然后在其他数组上迭代:

var out = …
Run Code Online (Sandbox Code Playgroud)

javascript arrays reduce merge

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

又一个C++对象初始化询问

我有这个类有很多类成员,还有很多不同的构造函数.

到目前为止,我在每个构造函数中使用了构造函数初始化列表,以我想要的方式调优每个成员.

这非常繁琐,因为每次我向我的类添加一个新成员时,我必须访问每个构造函数并更新初始化列表以向该成员添加默认值.

所以,我想我会添加一个方法来初始化我需要的值.问题!由于该方法在初始化列表之后执行,因此我在此初始化列表中放置的特定值将被我的方法覆盖.

快速例子:

class A
{
public:
  A();
  A( B b );
  A( int i );
  // A( .... ); plenty of them


private:
  int member1, m2, m3,m4;
  bool b1,b2, b3;
  // ....
  // every time I add a member I have to modify the initialization lists

  // solution: agregate member initialization in a member function: 
  void init_members();    
}

// init list constructors
A::A() : m1(false), m2(false), m3(false), m4(true) .... …
Run Code Online (Sandbox Code Playgroud)

c++ initialization initializer-list

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

返回Java Streams中的N个最后元素

这个问题只是为了好玩.

我有这个方法:

private static String getBaseDomain(String fullDomain) {
    // we take the base domain from the usual xxx.yyy.basedomain.tld: we 
    // want only the last 2 elements: basedomain.tld
    List<String> elements = Arrays.asList(fullDomain.split("\\."));
    if( elements.size() > 2){
        elements = elements.subList(elements.size()-2, elements.size());
    }
    return String.join(".", elements);
}
Run Code Online (Sandbox Code Playgroud)

我想知道如何使用java流API获得相同的结果(实际上,我想知道哪种方法是最节省资源的).

我无法想象如何仅从流中获取最后2个元素:limit(2)将给出两个元素,并且skip(XXX)我不知道如何提取流"inline"的大小.

你能告诉我你会怎么做吗?

java string split java-8 java-stream

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

在Java中使用泛型时,为什么必须指定<?>?

我是Java的新手,虽然我在C++和其他语言方面有很多经验.所以模板/泛型不是我不知道的.

有一些困扰我,虽然,这是这<?>是有人告诉我,我应该提前哪些特定类型的它会用,每次我用的东西一般情况下,当我不知道:

喜欢:

List< MyGeneric >    foo; // bad
List< MyGeneric<?> > bar; // good
Run Code Online (Sandbox Code Playgroud)

使用第一个表达式时,IntelliJ不会对我进行barf,我不明白它为什么要这样做.我的同事已经表示第二个表达好得多,但不能告诉我到底为什么.

我的意思是,这两者之间究竟有什么不同,除了第二部分明确表示它是我们操纵的通用事实?

编译器当然知道它在编译时是通用的,所以我的猜测是第二个表达式只是更好,因为它告诉程序员他正在操作泛型.

我对吗?

编辑:为了澄清,我滔滔不绝地使用最严格的类型,比如List<MyGeneric<Double>>,每当我事先知道我将要存储在那里时.我的问题是当我存储未知类型的泛型时.

java generics

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