当前位置: 首页 > 知识库问答 >
问题:

带IPC_EXCL的shmget

束福
2023-03-14
./test 10 0
./test 10 1

谢谢你的帮助!

#include <sys/shm.h>
#include <sys/stat.h>
#include <errno.h>

#include <stdlib.h>
#include <vector>
#include <iostream>
#include <stdexcept>
using namespace std;

int main( int argc, char** argv )
{
   cout << "usage: " << argv[0] << " <key> <mode (0=creator 1=client)>" << endl;
   if ( argc < 3 ) return 0;

   int key  = atoi( argv[1] );
   int mode = atoi( argv[2] );

   cout << "key=" << key << endl;
   cout << "mode=" << mode << endl;

   char c;
   int shmid=-1;
   int size = 100; // bytes

   try
   {
      if ( mode == 0 ) // creator
      {
         cout << "creating segment" << endl;
         int flags = ( IPC_CREAT | IPC_EXCL | 0666 );
         shmid = shmget( key, size, flags );

         if ( shmid== -1 )
            throw runtime_error("failed to create segment");

         cout << "created: shmid=" << shmid << endl;
      }
      else if ( mode == 1 )
      {
         shmid = shmget( key, 0, 0 );

         if ( shmid== -1 )
            throw runtime_error("failed to load");

         cout << "loaded: shmid=" << shmid << endl;
      }

      cout << "attach? (press key to continue)" << endl;
      cin >> c;

      void* data = shmat( shmid, NULL, 0 );

      if ( data == (void *) -1 )
         throw runtime_error("failed to attach");

      cout << "attached to id=" << shmid << endl;

      cout << "destroy? (press key to continue)" << endl;
      cin >> c;

      if ( shmctl( shmid, IPC_RMID, NULL ) == -1 )
         throw runtime_error("failed to destroy");

      cout << "destroyed" << endl;
   }
   catch( const exception& e )
   {
      cout << e.what() << " errno=" << errno << endl;
   }
}

共有1个答案

桂阳文
2023-03-14

您应该更加关注IPCS的输出。使用带有10键的示例代码。

服务器已经创建了段:

$ ipcs -m
------ Shared Memory Segments --------
key        shmid      owner      perms      bytes      nattch     status
0x0000000a 1470791680 hristo     666        100        1

客户端已连接,服务器已将段标记为要销毁:

$ ipcs -m
------ Shared Memory Segments --------
key        shmid      owner      perms      bytes      nattch     status
0x00000000 1470791680 hristo     666        100        1          dest
^^^^^^^^^^
 类似资料:
  • 我有一个报告,我想在其中显示页脚,但不想显示页眉部分-在摘要带。我可以通过选中“带有页眉和页脚的摘要”来显示两者或不显示。

  • 现在我的问题是,如何在自定义的而不是自定义的中重写方法?我没有在这里公布我的代码,因为它与链接的代码本质上是相同的,只是我需要为子创建一个自定义的来代替,这样它就可以按照“pptang”的答案所述进行正确的度量。 否则,有没有比在第二个RecyclerView中使用1个RecyclerView更好的方法?只能有1个RecyclerView使用上述列表和每个中唯一项的网格填充活动/片段吗?

  • 2)如果困境是真的,为什么事情要这样设置?谷歌计划反对TabHost和基于标签的多活动方法吗?多活动方法有什么不愉快的地方吗? 3)如果继续支持这两种方法,它们的优缺点是什么?如果我使用ActionBar+片段,我会遇到任何困难吗?例如,当我想让我的一个选项卡屏幕滑过/弹出一个额外的屏幕/片段时,我会不会在ActionBar中切换到/从选项卡中切换到选项卡?

  • 问题内容: 之间有什么区别 和 我都尝试过,但似乎都可以,但是我是在问,以防万一我需要小心(例如,%以外的单位等)。 问题答案: 这完全是关于HTML标记的真实有效性。这是W3C(WWW联盟)的工作目的。许多事情可能都在HTML中起作用,但是必须进行验证才能被网络浏览器更仔细地识别。您甚至可以在开头和结尾处省略and 标记,但是完全不建议这样做,没有人这样做,它被视为“错误代码”。 因此,将它们放

  • 根据Spring网站上的这个教程,我知道了如何使用Stomp和Spring4建立一个基于WebSocket的应用程序。在客户端,我们有: 在服务器端,控制器中有以下内容: 现在,我明白了确保如果消息发送到目标,那么将调用方法。由于订阅了,将消息发送回。 那么,有什么方法可以用Spring4、SockJS和没有跺脚的情况下做到这一点呢?还是Spring4WebSocket只支持stomp?

  • 我正在尝试将vaadin与spring(没有Spring Boot)和基于java注释的spring部分配置结合起来。 自动连接似乎适用于vaadin ui部分,但不适用于“自定义ui类”(例如,“公共类LoginScreen扩展自定义组件”)。我在SysOut上得到一个NPE或一个空对象。 此外,我注意到“@ComponentScan(base Packages={"net.myapp"})”没