我想在项目中定义一个内联函数,用c99编译.我该怎么做?当我在头文件中声明该函数并在.c文件中提供详细信息时,其他文件无法识别该定义.当我将显式函数放在头文件中时,我遇到了一个问题,因为使用它的所有.o文件都有定义的副本,因此链接器给我一个"多重定义"错误.
我想要做的是:
header.h
inline void func()
{
do things...
}
lib1.c
#include "header.h"
...
lib2.c
#include "header.h"
Run Code Online (Sandbox Code Playgroud)
使用lib1.o和lib2.o的实用程序
我想生成互斥元素的映射,这可能需要是volatile.我试图定义这种东西:
typedef std::map<int key, volatile long mutex> tMutexMap;
tMutexMap myMutexMap;
Run Code Online (Sandbox Code Playgroud)
然后使用简单的映射索引,例如:
myMutexMap[10]=0;
myMutexMap[23]=1;
Run Code Online (Sandbox Code Playgroud)
我正在使用gcc 4.1.2.gcc编译器不喜欢该代码.我收到一个错误
没有匹配函数来调用'std :: pair ....'"
我究竟做错了什么?
我在 Linux 上使用专有的 C++ 库,通过 gcc 编译,它使用 pthreads(我必须在 gcc 上使用 -lpthreads 标志)。我有一个围绕它的包装器,并且我知道该库正在使用多个线程。
该库动态使用多个线程 - 当我调用它时,我可以看到 20 到 1 个线程之间的任何位置。但我不想使用任务集。(我正在运行其他进程,并且我希望系统管理核心)。
有没有办法强制我的可执行文件使用单线程?无论是在编译时还是在运行时。谢谢。
编辑:我可以使用任务集运行可执行文件,然后 cat /proc//status 给我:
状态:R(正在运行) Tgid:1623 Pid:1623 PPid:31002 TracerPid:0 Uid:500 500 500 500 Gid:100 100 100 100 Utrace:0 FDSize:256 组:100 VmPeak:346528 kB VmSize:345 956 kB VmLck:0 kB VmHWM:199816 kB VmRSS:188388 kB VmData:192120 kB VmStk:128 kB VmExe:656 kB VmLib:12444 kB VmPTE:432 kB VmSwap:0 kB 线程:1 SigQ:2/62004 SigPnd:00 00000000000000 ShdPnd:0000000000000000 SigBlk:0000000000000000 SigIgn:0000000000000004 SigCgt:0000000180000000 CapInh:0000000000000000 CapPrm:0000000000000000 CapEff:0000000000000000 CapBnd:ffffffffffffffff CPU _allowed: 02 CPU_allowed_list: …
我需要在 linux 的特定文件夹中监视特定文件类型(具有已知扩展名)的创建。我知道 inotify 只会监视现有文件。我理解正确吗?
是否有替代 inotify(或类似包)的方法可以让我按文件类型监视文件创建?
编辑:我需要的是通过掩码监视文件创建。我需要监视 *.json 的路径,而忽略其他文件类型。