草庐IT

c++ - 如何在主进程和线程之间使用 Unix 管道?

每当信号从线程到达主进程时,我都试图通过管道传输数据。这可能吗?如何做到这一点?问题:子线程读取数据并将其放入队列。主应用程序做自己的事情,但是,当队列中有可用数据时,线程应通知它并开始处理数据(主线程可以访问队列)。这个场景应该如何实现? 最佳答案 是的,它可以通过管道。第一步调用pipe得到一个管道:#includeintmain(...){intfileDescriptors[2];pipe(fileDescriptors);第2步将fileDescriptors[0]传递给主进程,并将fileDescriptors1到线程。

c++ - 如何监视哪些进程访问 Unix 中的特定文件?

我有一个文件,很多进程(和进程线程)正在访问它。我想监控文件以获取所有进程试图访问该文件的列表。能够记录时间戳对于日志记录也非常有用,尽管我可以没有它。是否有任何Unix实用程序可以执行类似的操作?如果不存在这样的实用程序,我应该如何使用脚本(shell、Perl)或程序(C、C++)对此进行编程? 最佳答案 在Linux下,inotify可能正是您要找的。 关于c++-如何监视哪些进程访问Unix中的特定文件?,我们在StackOverflow上找到一个类似的问题:

c++ - 如何在 Unix/Linux 中创建软件包?

我们如何创建一个软件包,以便提取我们的软件后tarball用户可以做典型步骤?$gunzip 最佳答案 CMake是难以理解的GNU/Autools的替代品。http://www.cmake.org/cmake/help/examples.html例如KDE正在使用它。 关于c++-如何在Unix/Linux中创建软件包?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/57297

c++ - 在 UNIX 系统上调用 sleep(0) 有什么影响?

我看到人们在我使用的高度多线程、多进程的应用程序系统的某些部分中这样做。它似乎是围绕调试行完成的:std::cerr如果我退出sleep(0);(即将其更改为“”),系统的调试输出似乎以不同的顺序出现(不可预测),所以我认为它使该行更快出现-但我认为std::cerr是无缓冲的,而std::endl无论如何都会调用std::flush(),那为什么会这样呢? 最佳答案 基本上,它会将控制权交还给调度程序,并让您立即重新安排。也就是说,这基本上是一种试图欺骗操作系统做某事的黑客行为。愚弄操作系统绝不是一个好主意。如果系统适本地欠载,那

c++ - 如何找出所有闭源应用程序正在写入的位置?

我有一个应用程序(我没有源代码),可以像这样从命令行调用$./notmyapp我想知道应用程序写入的所有位置。它在调用它的目录中输出一些文件,但我需要确保这些是唯一创建的文件。因此,我需要隔离应用程序以找出它在运行时创建/编辑的所有文件。我该怎么做?使用Perl或C或C++的某种方式?这些语言中的任何标准库是否有办法做到这一点? 最佳答案 strace、ktrace/kdump、truss、dtruss等您的平台提供的用于跟踪系统调用的其他程序可能正是您正在寻找的。期待其中任何一个的大量输出。要弄清楚应用程序正在读取和写入哪些文件,

c++ - 用于基准代码运行 K 次的 Unix 命令

假设我在Unix中以这种方式执行了一段代码:$./mycode我的问题是有没有一种方法可以计算代码的运行时间执行了K次。例如K=1000的值。我知道Unix“时间”命令,但只执行了1个实例。 最佳答案 改进/澄清查理的回答:time(foriin$(seq10000);do./mycode;done) 关于c++-用于基准代码运行K次的Unix命令,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/qu

c++ - Vim C++ 自动完成

如何在Vim中启用自动完成?这个我试过,但是我对vimrc文件等不熟练,所以没有成功。你能给我一步一步的指导吗?编辑我尝试安装OmniCppComplete。按照说明进行操作,但是当我尝试使用它时出现以下错误:Errordetectedwhileprocessingfunctionomni#cpp#complete#Main..24_InitComplete:line24:E10:\shouldbefollowedby/,?or& 最佳答案 默认情况下,Vim将使用Ctrl-N或Ctrl-P根据文件中的单词进行补全,这对于最近引用的

c++ - 获取生成 UNIX 信号的故障地址

我对信号处理程序很感兴趣,它可以识别导致问题的指令的地址。我知道siginfo_t和__builtin_return_address但似乎都不起作用:#include#includevoidhandler(int,siginfo_t*,void*);intmain(){begin:std::cerrsi_addr输出如下:0x10978~0x10a4c~0x10a54si:0At:0xfb945364At:0xfb939e64At:0x10a40At:0x10740At:0At:SegmentationFault因此siginfo_t为NULL,__builtin_return_add

用于日志解析的 C++ 库

关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。关闭6年前。Improvethisquestion是否有专门用于日志解析(帮助识别多行事件)的C++库?像用于Apache日志的MergeLog或用于Web解析的libcurl?

c++ - 为什么读写管道时需要关闭fds?

这是一个example为了说明我的意思:#include#include#includeintmain(void){intfd[2],nbytes;pid_tchildpid;charstring[]="Hello,world!\n";charreadbuffer[80];pipe(fd);if((childpid=fork())==-1){perror("fork");exit(1);}if(childpid==0){/*Childprocessclosesupinputsideofpipe*/close(fd[0]);/*Send"string"throughtheoutputsi