Articles of c + +

使用clang编译时找不到'omp.h'文件

我正尝试在运行linux mint的笔记本电脑上使用clang(3.7.0)来设置OpenMP项目。 现在我读了OpenMP不被支持,所以我按照这个教程https://clang-omp.github.io/将openMP整合到了clang中。 我已经克隆了源代码,设置了环境variables,并将-fopenmp标志设置为我的项目,但是在构build时,仍然收到错误“fatal error:'omp.h'文件未find”。 我的猜测是我已经设置了错误的环境variables。 有没有办法检查我是否把它们放在正确的地方? 我刚把它们复制到.bashrc文件中。 编辑:当我运行$查找omp.h我得到: /usr/include/re_comp.h /usr/include/linux/ppp-comp.h /usr/include/linux/seccomp.h /usr/include/net/ppp-comp.h /usr/include/openssl/comp.h /usr/lib/gcc/x86_64-linux-gnu/4.8/include/omp.h /usr/lib/perl/5.18.2/CORE/regcomp.h /usr/src/linux-headers-3.13.0-24/arch/arm/include/asm/seccomp.h /usr/src/linux-headers-3.13.0-24/arch/microblaze/include/asm/seccomp.h /usr/src/linux-headers-3.13.0-24/arch/mips/include/asm/seccomp.h /usr/src/linux-headers-3.13.0-24/arch/powerpc/include/uapi/asm/seccomp.h /usr/src/linux-headers-3.13.0-24/arch/s390/include/asm/seccomp.h /usr/src/linux-headers-3.13.0-24/arch/sh/include/asm/seccomp.h /usr/src/linux-headers-3.13.0-24/arch/sparc/include/asm/seccomp.h /usr/src/linux-headers-3.13.0-24/arch/x86/include/asm/seccomp.h /usr/src/linux-headers-3.13.0-24/include/linux/ppp-comp.h /usr/src/linux-headers-3.13.0-24/include/linux/seccomp.h /usr/src/linux-headers-3.13.0-24/include/net/ipcomp.h /usr/src/linux-headers-3.13.0-24/include/uapi/linux/ppp-comp.h /usr/src/linux-headers-3.13.0-24/include/uapi/linux/seccomp.h /usr/src/linux-headers-3.13.0-24-generic/include/config/seccomp.h /usr/src/linux-headers-3.13.0-24-generic/include/config/crypto/pcomp.h /usr/src/linux-headers-3.13.0-24-generic/include/config/inet/ipcomp.h /usr/src/linux-headers-3.13.0-24-generic/include/config/inet6/ipcomp.h /usr/src/linux-headers-3.13.0-24-generic/include/config/isdn/ppp/bsdcomp.h /usr/src/linux-headers-3.13.0-24-generic/include/config/ppp/bsdcomp.h /usr/src/linux-headers-3.13.0-24-generic/include/config/xfrm/ipcomp.h /usr/src/linux-headers-3.13.0-24-generic/include/linux/ppp-comp.h /usr/src/linux-headers-3.13.0-24-generic/include/linux/seccomp.h 这里是我的makefile: # Requires the following project directory structure: # /bin # /obj # /src # Use 'make […]

使用fclose来pipepopen是一个严重的错误?

几个月前我写了一个Linux的CGI应用程序,它使用popen()来读取命令的输出,然后用fclose()closurespipe道。 现在,我读了closurespipe道需要使用pclose() 。 手册说: popen()的返回值在所有方面都是一个标准的I / Ostream,除了它必须用pclose()而不是fclose(3)来closures。 我的代码是这样的: if ((NULL != (f = popen(command.value, "r")))) { //do something fclose(f); } 我的问题是: 我的错误有安全问题? 它的程序目前正在生产中。 在testing中,没有任何问题。 是真的需要,使用pclose()而不是fclose()修补它? 注:我只在程序中打开PIPE一次。 今天,在我本地的家里,我做了一些testing,并且fclose()和pclose()不返回表示失败的EOF。

在位域的情况下,哪一个更好用,unsigned char或unsigned int,为什么?

我只想知道下面的结构声明。 哪一个更好用于内存分配,为什么? 那么在无符号字符和无符号整数的情况下填充呢? struct data{ unsigned char a:3; unsigned char b:4; }; 和 struct data{ unsigned int a:3; unsigned int b:4; };

正确的初始化序列为Linux串行端口

我写了一个必须在Linux上使用串口的应用程序,尤其是ttyUSB。 读和写操作是用标准的select()/ read()循环和write()来完成的,它们可能没有错,但是初始化代码(或者某些部分的缺失)会损害tty子系统中的某些东西。 这里是: vuxboot(string filename, unsigned baud = B115200) : _debug(false) { _fd = open(filename.c_str(), O_RDWR | O_NOCTTY); if(_fd < 0) throw new io_error("cannot open port"); // Serial initialization was written with FTDI USB-to-serial converters // in mind. Anyway, who wants to use non-8n1 protocol? tcgetattr(_fd, &_termios); termios tio = {0}; tio.c_iflag = IGNPAR; […]

访问()有什么问题?

可能重复: 访问()安全漏洞 我从man page访问引用(2): 警告 :使用access ()检查用户是否被授权在实际上打开文件之前,使用open (2)会创build安全漏洞,因为用户可能会利用检查和打开文件之间的短时间间隔操纵它。 出于这个原因,应该避免使用这个系统调用。 这是什么意思,在什么情况下会是一个问题?

boost文件系统无效的跨设备链接错误

我正在尝试使用boost::filesystem将文件从一个位置移动到另一个位置。 我使用boost::filesystem::rename函数,但是当我尝试这样做时,我有以下错误。 terminate called after throwing an instance of 'boost::filesystem::filesystem_error' what(): boost::filesystem::rename: Invalid cross-device link: "./file_A.csv", "/opt/data/file_B.csv" Aborted (core dumped) 我明白,问题是我正试图将文件从一个文件夹移动到另一个卷上安装的另一个文件夹。 有什么解决scheme不同于 复制文件,然后删除它(它给了我一些安全感)。 包装mv在一个调用std::systen ? boost::filesystem是否还有其他的函数来实现我想实现的function? 我自己找不到。 我正在使用g ++和linux。

mmap一个10 GB的文件并加载到内存中

如果我想要mmap一个10 GB的文件并立即将整个文件加载到物理内存中,我该怎么做? 我不想使用像mlock这样的函数,因为它需要root权限。 有没有可以满足我的需求的系统调用? (我有足够的内存。)

什么键盘信号除了Ctrl-C可以捕捉?

我有一个(C,Linux)应用程序,通过closures来处理Ctrl-C SIGINT。 我想添加另一个信号处理程序,以便我可以使用另一个按键组合“运行时重新加载configuration”。 所以我正在寻找一个信号,我可以通过按键发送到前台进程,这不会强制进程退出或暂停。 还有别的吗?

构build一个makefile依赖/inheritance树

道歉,如果我解释这很糟糕,或者要求出血明显,但我是Linux内核的新手,有点在深处… 我们有一个embedded式Linux系统,这个系统包含一个非常糟糕的SDK,其中包含数百个文件夹,大多数文件夹包含一个rules.make,make,make.config或者一些变体,而根文件夹包含一个“master”makefile&rules.make,这意味着你可以从根文件夹中input“make sysall”,然后构build整个包。 到目前为止这样好,但试图debugging它是有点问题,因为文档会说: “ 要让内核输出debugging消息,只需定义#outputdebugmessagesplz ” 好的,但是这些东西中的一些是在“master”make / rules文件中定义的,其中一些是在子make / rules / config文件中定义的,一些是在.h文件中定义的。当然,它更好打开/closures这些东西从“顶部”make.config而不是修改个别.h文件,然后必须记得再次closures它们。 所以我认为从主“make”文件开始recursion地构build一个树,并遵循它所做的一切,定义或重新定义的所有东西,等等,但是似乎并没有一个简单的方法呢? 我假设我缺less一个“make”选项,把这个信息吐出来,或者只是makefile / config的用法。

在Linux中sched_setaffinity cpu亲和力

我在一台服务器上做了一个sched_setaffinitytesting,使用1个socket,4个内核,下面的/ proc / cpuinfo显示了cpu的信息: processor : 0 model name : Intel(R) Core(TM)2 Quad CPU Q8400 @ 2.66GHz cache size : 2048 KB physical id : 0 siblings : 4 cpu cores : 4 processor : 1 model name : Intel(R) Core(TM)2 Quad CPU Q8400 @ 2.66GHz cache size : 2048 KB physical id : 0 […]