Articles of c + +

正确的初始化序列为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 […]

在哪里为我的守护程序应用程序放置一个debugging日志文件?

我使用C语言和Linux作为我的编程平台。 我正在学习如何创build一个守护进程,并且我想创build一个日志文件,以便在守护进程中写入一条debugging消息。 我的问题是我应该把日志文件放在我的系统中。 我应该把它放在var文件夹? 请指教。 非常感谢。

Tcl.h:没有这样的文件或目录

我试图将一些代码从Solaris机器移植到Linux(特别是Redhat)机器上。 代码编译时没有问题,在Solaris框中运行没有问题。 但是,在Linux上重新编译时,我遇到了tcl.h的问题 – 编译器告诉我error: tcl.h: No such file or directory #include "tcl.h"多个文件的error: tcl.h: No such file or directory 。 据我所知,安装tcl8.4&tk8.4: /usr/lib/tcl8.4 /usr/share/tcl8.4 /usr/lib/tk8.4 /usr/share/tk8.4 但是,我无法在任何地方findtcl.h。 有谁知道它会在哪里? 还是Solaris需要的文件之一,但是Linux不需要包含在内? 或者甚至是否需要安装tcl / tk 8.4以外的东西?

vector <string>在超出范围之后不会清除内存

我遇到了以下问题,我不确定我是错的还是它的一个非常奇怪的错误。 我填充了大量的string,并希望它在某个点被清除。 这是一个简单的例子 #include <string> #include <vector> #include <unistd.h> //sleep #include <iostream> int main(){ { std::vector<std::string> strvec; for(long i = 0; i < 1000000; ++i){ std::string out = "This is gonna be a long string just to fill up the memory used by this fucking pthread\n"; strvec.push_back(out); } std::cout << "finished loading 1st\n"; sleep(10); // […]