【问题标题】:Share data between two indexpendent processes in C在 C 中的两个索引挂起进程之间共享数据
【发布时间】:2016-10-11 17:57:57
【问题描述】:

如何在两个独立(无分叉)进程之间共享数据(结构)。我想做的基本上是这样的:

process1:

Server(PID-399341): Waiting for input....

然后在另一个终端中

process2:

Enter server process:

399341

Enter a string:

Hello

终于

process1:

"Hello" has been entered. 

系统是 QNX/POSIX。我有什么选择来做到这一点?

谢谢!

【问题讨论】:

  • TCP/IP?还是写入文件?
  • 共享内存段?
  • 先进先出?消息队列?定制设备?维基?其他 HTTP 服务?运动鞋网?
  • 您要查找的词是 IPC 或进程间通信。 qnx.com/developers/docs/6.4.1/neutrino/sys_arch/ipc.html 该列表中的任何内容,可能是信号除外。
  • 套接字。共享内存。工业PC。对谷歌的所有好条款。 xD

标签: c process posix qnx


【解决方案1】:

这可以通过使用命名管道(FIFO)轻松实现。 只需选择与您的 PID 相同的 FIFO 名称即可。 这是服务器和客户端的工作代码。

服务器.c

    int fd;
    char buf[10], rdbuf[50];

    sprintf(buf,"%d",getpid());

    if(mkfifo(buf,0660) == -1)
            perror("mkfifo");

    printf("Server(PID-%d): Waiting for input..\n",getpid());

    fd = open(buf,O_RDONLY);

    read(fd, rdbuf, 50);

    printf("%s has been entered\n",rdbuf);

    close(fd);

    return 0;

client.c

    int fd;
    char wrbuf[50], buf[10];

    printf("Enter server process: ");
    scanf("%s",buf);
    getchar();

    fd = open(buf,O_WRONLY);

    printf("Enter message\n");

    gets(wrbuf);

    write(fd, wrbuf, strlen(wrbuf)+1);

我认为消息队列和共享内存段也可以通过使键值与 PID 相同来完成。但我不确定。

【讨论】:

  • 嗨,谢谢。总是很高兴看到简单的例子。那么服务器是如何知道缓冲区已经改变的呢?我计划在无限循环中使用它,客户端不断向服务器提供消息。
  • 在本例中服务器将始终读取 50 个字符。如果那里有一个空字符, printf 只打印那么多。因此缓冲区总是被服务器清除,然后等待另一条消息,这由您的操作系统负责。为了安全起见,在写入之前将所有空字符放入缓冲区。
猜你喜欢
  • 1970-01-01
  • 2022-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多