小编tom*_*KPZ的帖子

Unix pthreads和信号:每个线程信号处理程序

我无法让线程捕获正确的信号.

例如,

我首先开始一个主线程(tid 1).

然后,它使用设置SIGUSR1函数1()的信号处理程序signal(2).

主线程使用tid 2创建一个新线程.

在螺纹2,I寄存器的信号处理程序SIGUSR1,以function2()使用signal(2).

然后,线程1创建一个线程3(tid 3).

从线程3,我pthread_kill(1, SIGUSR1)用来向线程1发送信号.

然而,function2()被召唤,而不是function1().

是出于这种行为,还是需要更改以使这些信号处理程序工作?

编辑:我已经做了一些调试,结果发现信号IS被发送到线程1,但是function2()由于某种原因从线程1调用.这有解决方法吗?

c multithreading signals pthreads

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

C++:交换指向变量

可能重复:
为什么在写入字符串时会出现分段错误?

我有以下程序:

#include <iostream>
using namespace std;

void reverseString(char* first, char* last)
{
    while(first < last)
    {
        cout << *first << " " << *last << endl; //for debugging; prints 'H' and 'o' then crashes
        char temp = *last;
        *last = *first; //this line crashes the program
        *first = temp;
        first++;
        last--;
    }
}

int main()
{
    char* s = "Hello";
    reverseString(s, s + strlen(s) - 1);
    cout << s << endl;
}
Run Code Online (Sandbox Code Playgroud)

但是,我无法交换指针指向的值.我认为*p =*p1应该只是将p的指向值设置为p1的指向值,但似乎有些东西被搞砸了.在此先感谢您的帮助!

c++ swap pointers

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

Shell Scripting:在shebang中使用grep和tr

我的系统上有这个脚本:

#! /bin/grep cat

caterpillar
cat
lol
morecat
Run Code Online (Sandbox Code Playgroud)

当我运行它时,我得到了预期的输出,

#! /bin/grep cat
caterpillar
cat
morecat
Run Code Online (Sandbox Code Playgroud)

但是,如果我使用tr而不是脚本

#! /usr/bin/tr 'a' 'e'

caterpillar
cat
lol
morecat
Run Code Online (Sandbox Code Playgroud)

我希望得到

#! /usr/bin/tr 'a' 'e'

ceterpiller
cet
lol
morecet
Run Code Online (Sandbox Code Playgroud)

但是没有打印,如果我手动输入cat,我会得到c/t.如何将脚本更改为像第一个一样?

linux bash shell grep tr

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

从使用 dlopen 加载的共享库引用全局符号

我有一个共享库,我想从主程序访问符号。例如:

main.c

#include <stdio.h>

void bar(void) { puts("bar"); }

extern void foo(void);

int main(void) {
    foo();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

foo.c

#include <stdio.h>

extern void bar(void);

void foo(void) {
    puts("foo");
    bar();
}
Run Code Online (Sandbox Code Playgroud)

我编译并运行如下:

gcc -c -fpic foo.c
gcc -shared -o libfoo.so foo.o
gcc -L$(pwd) -o test main.c -lfoo
./test
Run Code Online (Sandbox Code Playgroud)

我得到了我期望的输出:

foo
bar
Run Code Online (Sandbox Code Playgroud)

但是,我必须使用dlopen()anddlsym()因为我想控制库的加载时间。更改的文件是:

main.c

#include <stdio.h>
#include <dlfcn.h>

void bar(void) { puts("bar"); }

int main(void) {
    void *handle = dlopen("./libfoo.so", RTLD_LAZY);
    void (*foo)(void) = (void(*)(void))dlsym(handle,"foo");
    foo();
    return …
Run Code Online (Sandbox Code Playgroud)

c shared-libraries dlopen dlsym

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

Verilog:“......不是常数”

我有这样创建的三根电线:

wire [11:0] magnitude;
wire [3:0] bitsEnd;
wire [3:0] leadingBits;
Run Code Online (Sandbox Code Playgroud)

所有这些都assign使用组合逻辑进行了一些表达式。以下代码工作正常:

assign leadingBits[3] = magnitude[bitsEnd + 3];
assign leadingBits[2] = magnitude[bitsEnd + 2];
assign leadingBits[1] = magnitude[bitsEnd + 1];
assign leadingBits[0] = magnitude[bitsEnd + 0];
Run Code Online (Sandbox Code Playgroud)

但是,以下(看似等效的)代码给出了错误bitsEnd is not a constant

assign leadingBits[3:0] = magnitude[bitsEnd + 3:bitsEnd];
Run Code Online (Sandbox Code Playgroud)

我不能在这个作业中使用速记吗?为什么在第二种情况下会出现这个错误而不是第一种情况?

verilog

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

使 yylex 返回 symbol_type 而不是 int

我正在尝试从 yylex 返回符号对象,如本文档http://www.gnu.org/software/bison/manual/html_node/Complete-Symbols.html所示

但是,当我编译时,我发现它return yy::parser::make_PLUS();被放入int yyFlexLexer::yylex(),所以我收到此错误消息(并且许多类似的消息形成其他规则):

lexer.ll:22:10: error: no viable conversion from 'parser::symbol_type' (aka 'basic_symbol<yy::parser::by_type>') to 'int'
{ return yy::parser::make_PLUS(); }
Run Code Online (Sandbox Code Playgroud)

解决这个问题的正确方法是什么?

词法分析器

%{
#include "ASTNode.hpp"

// why isn't this in parser.tab.hh?
# ifndef YY_NULLPTR
#  if defined __cplusplus && 201103L <= __cplusplus
#   define YY_NULLPTR nullptr
#  else
#   define YY_NULLPTR 0
#  endif
# endif

#include "parser.tab.hh"

#define yyterminate() return yy::parser::make_END()
%}

%option nodefault c++ noyywrap

%%
"+"            { return yy::parser::make_PLUS(); }
"-" …
Run Code Online (Sandbox Code Playgroud)

c++ bison flex-lexer

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