小编use*_*970的帖子

管道stdout和stderr到shell脚本中的两个不同进程?

我做了一个pipline

 command1 | command2
Run Code Online (Sandbox Code Playgroud)

因此,command1的stdout进入command2,而command1的stderr进入终端(或shell的stdout所在的地方).

command3当stdout仍然要命令2时,如何将command1的stderr传递给第三个进程()?

bash shell pipe io-redirection

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

GCC内存屏障__sync_synchronize vs asm volatile("":::"memory")

asm volatile("": : :"memory")通常用作内存屏障(例如,在Linux内核barrier宏中看到).

这听起来与GCC内置的相似__sync_synchronize.

这两个相似吗?

如果没有,有什么区别,何时使用另一个?

c gcc

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

不使用时删除posix共享内存?

是否有任何方式,特定于Linux,shm_open()在没有进程使用它们时删除posix共享内存段(获取).即将它们引用计数并让系统在引用变为0时将其删除

几点说明:

  • 如果程序崩溃,建立一个删除它们的atexit处理程序不起作用.

  • 目前,以linux为特定方式,我将pid嵌入到段名中,并尝试通过在外部程序中遍历/ dev/shm来查找未使用的段.这有一个缺点,就是不得不以相当狡猾的方式定期清理它们.

  • 由于程序可以运行多个副本,因此程序在启动时重用的段使用定义良好的名称是不可行的.

c linux shared-memory

12
推荐指数
2
解决办法
7259
查看次数

为RAII包裹C分配

我从库中获得了这些普通的C函数:

struct SAlloc;
SAlloc *new_salloc();
void   free_salloc(SAlloc *s);
Run Code Online (Sandbox Code Playgroud)

有什么方法可以用C++将它包装成智能指针(std :: unique_ptr),或者RAII包装器吗?

我主要是对标准库的可能性感到好奇而没有创建我自己的包装器/类.

c++ smart-pointers c++11

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

将n个最高位设置为twiddling

我有以下功能设置N个最高位,例如set_n_high(8)== 0xff00000000000000

uint64_t set_n_high(int n)
{
    uint64_t v = 0;
    int i;
    for (i = 63 ; i > 63 - n; i--) {
        v |= (1llu << i);
    }

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

现在只是出于好奇,C中是否有任何方法可以在不使用循环(或查找表)的情况下完成相同的操作?

编辑:n = 0和n = 64是要处理的情况,就像循环变体一样.

c bit-manipulation

7
推荐指数
2
解决办法
317
查看次数

使用unsigned long long签名扩展

我们发现了一些奇怪的值,下面是一个小测试用例.这将打印"FFFFFFFFF9A64C2A".这意味着无符号的长长似乎已被标记延长.但为什么 ?下面的所有类型都是无符号的,那么符号扩展的是什么?预期输出为"F9A64C2A".

#include <stdio.h>

int main(int argc,char *argv[])
{
    unsigned char a[] = {42,76,166,249};

    unsigned long long ts;
    ts = a[0] | a[1] << 8U | a[2] << 16U | a[3] << 24U;

    printf("%llX\n",ts);


    return 0;

}
Run Code Online (Sandbox Code Playgroud)

c

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

gcc检测静态库中的重复符号/函数

我们有什么方法可以让gcc检测静态库中的重复符号与主代码(或另一个静态库?)

情况如下:

main.c错误地包含一个函数定义,例如带有签名 uint foohash(const char*)

foo.c还包含带签名的函数定义 uint foohash(const char*)

foo.c和其他源文件被编译为静态util库,主程序链接在其中,例如:

 gcc -o main main.o util.o -L ./libs -lfooutils
Run Code Online (Sandbox Code Playgroud)

所以,现在main.o和libs/libfooutils.a都包含一个foohash函数.据推测,链接器在main.o中找到了这个符号,并且不会在其他地方寻找它.

我们有什么方法可以让gcc检测到这种情况吗?

c gcc

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

Java,会不稳定也能保证可见性?

public class Stuff {
  private final Timer timer = new Timer(true);
  public static final int DEFAULT_TIMEOUT = 1500;
  private volatile int timeout = DEFAULT_TIMEOUT;


  public void doStuff(OtherStuff) {
     ...
     timer.schedule(timeout, ...);
  }

  public void setTimeout(int timeout) {
     this.timeout = timeout;
  }

  public int getTimeout() {
    return timeout;
  }

}
Run Code Online (Sandbox Code Playgroud)

除了可以从另一个类更改的超时变量外,只从1个线程访问此类的实例.在我的例子中是一个JMX bean,这意味着可以在运行时从管理界面改变超时.

doStuff()可以运行100次/秒,而setTimeout()可以每周运行一次 - 因此执行setTimeout()的人和执行doWork()的人之间的顺序并不重要.

timeout在这种情况下是否足够挥发?内存模型是否可以保证从一个线程设置此doStuff()方法对方法可见?

另一种似乎安全的替代方案就是:

public class Stuff {
  private final Timer timer = new Timer(true);
  public static final int DEFAULT_TIMEOUT = 1500;
  private int timeout …
Run Code Online (Sandbox Code Playgroud)

java concurrency

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

"round"time_t到day/hour?

我有一个unix time_t,有没有简单的方法将它转换为time_t所以它:

  1. 代表time_t当天的午夜?
  2. 表示time_t的小时开始?

c time

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

让链接器删除avr/gcc的未使用的目标文件

我正在使用avr-gcc作为atmega-328p微控制器.代码构建为:

avr-gcc -g -Wall -Os -mmcu=atmega328p -D__AVR_ATmega3280__ -DARCH_AVR -I/usr/avr/include -DF_CPU=16000000   -c -o heap.o heap.c
avr-gcc -g -Wall -Os -mmcu=atmega328p -D__AVR_ATmega3280__ -DARCH_AVR -I/usr/avr/include -DF_CPU=16000000   -c -o kerneltimer.o kerneltimer.c
avr-gcc -g -Wall -Os -mmcu=atmega328p -D__AVR_ATmega3280__ -DARCH_AVR -I/usr/avr/include -DF_CPU=16000000   -c -o message.o message.c
avr-gcc -g -Wall -Os -mmcu=atmega328p -D__AVR_ATmega3280__ -DARCH_AVR -I/usr/avr/include -DF_CPU=16000000   -c -o driver.o driver.c
avr-gcc -g -Wall -Os -mmcu=atmega328p -D__AVR_ATmega3280__ -DARCH_AVR -I/usr/avr/include -DF_CPU=16000000   -c -o watchdog.o watchdog.c
avr-gcc -g -Wall -Os -mmcu=atmega328p -D__AVR_ATmega3280__ -DARCH_AVR -I/usr/avr/include -DF_CPU=16000000   -c -o mutex.o mutex.c
avr-gcc …
Run Code Online (Sandbox Code Playgroud)

c linker avr-gcc

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

带小数的整数除法

在C#中使用十进制类型进行"整数"除法的正确方法是什么?

 decimal a = 130, b  = 60;
 decimal res = a / b; //need to get 2.0, not 2.6666
Run Code Online (Sandbox Code Playgroud)

c#

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

禁用rtti的后果?

g++ 和 clang++ 都可以选择使用-fno-rtti.

这样做的所有后果是什么?

c++ gcc clang

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