草庐IT

sysv-ipc

全部标签

c++ - 我们什么时候应该选择其他IPC而不是直接内存访问来进行线程间通信

由于同一进程中的线程共享相同的地址空间,我们可以通过直接内存访问和互斥锁在这些线程之间传输数据,那么在这种情况下我有以下问题:全局变量和互斥量是否足以进行线程间通信?如果问题1为假,在什么情况下我们应该选择其他IPC而不是直接内存访问?或者说,在什么情况下其他IPC意味着比使用全局变量和互斥量更合适?谢谢。更新感谢@ssyam指出关于“全局变量”的错误陈述。我选择添加一个部分而不是更正原始段落,因为对该段落提出了许多意见。 最佳答案 不需要全局变量。请记住,线程例程可以采用参数,因此它可能是任何类型的变量,包括动态分配的变量。通常你

c++ - 使用散列样式 SYSV 编译 libstdc++

有什么方法可以用散列样式SYSV而不是GNU/Linux来编译GCC的libstdc++?我有一个工具链(通过crosstool-ng),我用它来编译我们公司的库,以便在非常广泛的Linux系统上工作。其中一个系统是一个非常古老的RedHat,它只有SYSV哈希样式,当我使用工具链编译一个纯C库/程序时,它运行良好,因为生成的二进制文件使用SYSV。但是,当我链接libstdc++时,二进制文件会自动更改为GNU/Linux风格,原因是因为libstdc++是作为GNU/Linux构建的,因此出现了问题。在这个系统中运行二进制文件给我错误ELFfileOSABIinvalid为了完整起

c++ - IPC:在两个程序之间使用 C++ 中的命名管道

我正在尝试在同一台机器上运行的两个不同程序之间实现IPC(在我的例子中是CentOS7)。为了获得一种松耦合,我决定为IPC使用命名管道。因此,我在玩以下示例时遇到了不同的问题。创建并写入管道:#include#include#include#include#include#include#include#include#include#include#includeusingnamespacestd;main(){intfd;char*myfifo=newchar[12];strcpy(myfifo,"./tmp/myfifo1");/*createtheFIFO(namedpipe

linux - 使用进程间通信 (IPC) 的性能影响

IPC的用途是什么?是否可以使用IPC在进程之间发送更大的JSONblock(数百个字符)?我应该尝试使用IPC发送尽可能小的消息,还是通过减少消息大小获得的性能提升是否值得付出努力? 最佳答案 WhattypeofusageisIPCintendedforandisitisOKtosendlargerchunksofJSON(hundredsofcharacters)betweenprocessesusingIPC?从本质上讲,IPC就是字面意思。当您需要在进程之间传递信息时(无论是什么),它是一个可以使用的工具。该主题非常广泛,

linux - UNIX/Linux IPC : Reading from a pipe. 如何在运行时知道数据的长度?

我有一个子进程,它生成一些可变长度的输出,然后使用半双工管道将其发送给父进程。在父级中,如何使用read()函数?由于每次数据的长度可能不同,我如何在运行时知道数据的大小以对缓冲区执行任何malloc()?fstat()函数可以用于管道文件描述符吗?我知道read()函数将读取指定数量的字节,但如果在读取请求的字节之前到达文件末尾(不是EOF字符),它将返回0。我专门运行带有2.6.27-9内核的UbuntuGNU/Linux。RichardStevens在UNIX环境中的高级编程中的所有示例都在写入管道时指定了数据的长度,或者依赖于fgets()stdio.h函数。因为我关心速度,所

linux - 为什么线程之间是IPC-Mechanism?

关闭。这个问题需要更多focused.它目前不接受答案。想改善这个问题吗?更新问题,使其仅关注一个问题editingthispost.8年前关闭。Improvethisquestion我有一个疑问,线程共享除堆栈之外的所有进程段。因此,为了在线程之间进行通信,假设我想将一个单词“Hello”从一个线程传递到另一个线程,IPC机制(例如消息队列)需要什么。 最佳答案 在一个进程中的线程之间以及与其他进程中的线程之间有各种各样的数据通信方式。您只需选择一款适合您的需求即可。共享内存单个进程中的线程可以访问进程中的所有内存,尽管正如您所说

c++ - 当进程通过 msgrcv 读取 IPC 消息时会发生什么?

这个问题不太可能帮助任何future的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况有关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visitthehelpcenter.关闭9年前。当进程使用msgrcv读取IPC消息时会发生什么?为什么我不能多次阅读具有相同mtype的消息?正在使用的结构代码:structmsgbuff{longmtype;charmtext[150];};

linux - Perl:如何通过 IPC::Open3 重定向的 STDOUT/STDERR fhs

我正在trycatch我的perl代码从打印和类似语句以及外部命令生成的输出。由于设计限制,我无法使用像Capture::Tiny这样的解决方案。我需要在生成输出后立即将其转发到缓冲区变量,并且我需要能够区分STDOUT和STDERR。理想情况下,外部命令的解决方案除了能够捕获STDOUT和STDERR而不是打印它们之外,基本上就像系统一样工作。我的代码应该:保存旧的STDOUT/STDERR文件句柄。为STDERR和STDOUT创建一个新的。将所有输出重定向到这里。打印一些东西。恢复旧的文件句柄。对捕获的输出做一些事情,例如打印出来。但是我无法捕获外部命令生成的输出。我无法使用IPC

android - 如何在 Android 中使用共享内存 (IPC)

我已经在Linux中编写了一个简单的共享内存C程序。我如何在Android中使用共享内存(或者我应该称之为“ashmem?”)?我希望你能给我一个循序渐进的指导。 最佳答案 这是对我有用的:1)打开一个内存文件对象:mFile;2)创建一个服务,使用mmap将其映射到ashem;3)使用ParcelFileDescriptorpfd将native文件描述符(fd)返回给绑定(bind)到您的服务的客户端;4)为获取fd的客户端创建JNI并使用mmap映射到Ember;5)使用此fd创建InputStream,现在客户端可以使用Inp

Linux:我可以在不使用任何 IPC(管道等)的情况下读取另一个进程的输出吗?

在Linux中是否有可能在另一个进程不知道的情况下以某种方式读取(从stdout和stderr)的输出?假设我有一个进程A在后台运行,进程B想要读取它的输出——这可能吗?我不能使用管道或屏幕程序。我尝试从/proc/xxx/fd或/pts/xconsole等读取,但到目前为止没有任何效果。 最佳答案 在内核中,我猜你可以编写一个驱动程序来Hook读取和写入以获得你想要的。在用户空间中,您可以编译一个修改过的glibc,它将stdout和stderr输出连同进程和线程ID一起记录到某个文件中。但如果你破坏了某些东西,那是有风险的。(假