c - 共享内存程序在 c 中不起作用

标签 c unix ipc

有两个程序,一个是将内容放入共享内存的调用服务器,另一个是从共享内存接收内容的客户端,这两个程序都成功连接到共享内存,但数据未显示在客户端。

客户端.c

#include<fcntl.h>
#include<sys/ipc.h>
#include<sys/shm.h>
void main(int argc,char * argv[])
{
     int shmid=shmget(124,70,0777);
     char * data;
     printf("%d\n",shmid);  
     data=shmat(shmid,0,0);
     printf("%s",data);
}

服务器.c

#include<fcntl.h>
#include<sys/ipc.h>
#include<sys/shm.h>
void main(int argc,char * argv[])
{
    int shmid=shmget(124,70,0777|IPC_CREAT);
    char * data,*ptr;
    printf("%d\n",shmid);
    if((data=shmat(shmid,0,0))==(char *)-1);
    {
        printf("No attach\n");
    }
    ptr=data;
    memset(data,0,1024);
    printf("%s",data);
    char c[]="My name is milap pancholi";
    int i=0;
    for(i=0;i<sizeof(c);i++)
    {
        printf("%c",c[i]);
        data+=c[i];
    }
    printf("%s\n",ptr);
}

最佳答案

你的主要问题是:

data+=c[i];

这会进行指针运算,推进 data ,根本不是你想要的。将其替换为:

data[i] = c[i];

其他问题:

  • main返回 int , 不为空。使用 int main() { ... }如果您不需要参数计数和值(为了避免警告,您应该方式调高)。
  • 你错过了#include <stdio.h>对于 printf
  • 你错过了#include <string.h>对于 memset

关于c - 共享内存程序在 c 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29863973/

相关文章:

c - 插入链表

C 编程 - 全局可见的实例

linux - 每次启动时都需要输入exec bash

csv - 使用 AWK 搜索 .CSV 文件 - 仅使用第一行

liferay - 使动态添加的 portlet 具有与调用 portlet 相同的 scopeGroupId

c - C 中的递归函数,用于确定整数的数字是否按升序、降序或两者都不排序

c++ - C/C++ ftplib : Undefined reference to _imp__FtpInit

c - Unix - 关于 & 和 ps

c# - .NET 进程间 "events"

c - Win32 匿名管道在首次读取后损坏