红联Linux门户
Linux帮助

简单的进程程序问题?

发布时间:2009-09-04 22:42:50来源:红联作者:释梵
#include
#include
#include
#include
#include
#include

int main()
{
int shmid;
char *shmptr;
if(shmid=shmget(IPC_PRIVATE,1000,0)<0)
{
printf("Here is the server:error,get share memeroy failed!\n");
exit(1);
}
if((shmptr=(void*)shmat(shmid,0,0))==(void*)-1)
{
printf("Here is the server:error,to make the shmat\n");
exit(1);
}
shmptr="Hello World";
if(system("./receiver")<0)
{
printf("Here is the server:System error");

}
sleep(320);
return 0;
}
运行这个程序的时候报错:
Here is the server:error,to make the shmat
不知道是什么原因,希望大侠指点一二。。。
文章评论

共有 4 条评论

  1. 释梵 于 2009-09-05 10:17:33发表:

    在其他的地方发现了答案
    if(shmid=shmget(IPC_PRIVATE,1000,0)<0)
    这句话有优先级问题,应改为
    if((shmid=shmget(IPC_PRIVATE,1000,0))<0)
    麻烦大家了

  2. 释梵 于 2009-09-05 09:47:44发表:

    我按照wang的说法把cast改成了(char *),但是还是原来的那个报错,至于0,0。我的书上写着
    void *shmat(int shmid,void *addr,int flag);
    如果addr为0,系统将自动查找进程地址空间,将共享内存区域附加到第一块有效区域上,此时flag无效。
    所以我觉得这么写似乎没什么错。
    我用gdb debug的时候发现shmid总是0,不知道跟这个有没有关系。

  3. numdon 于 2009-09-05 00:03:04发表:

    不懂

  4. wang7131984 于 2009-09-04 23:34:55发表:

    perror()来打印具体的错误信息,还有你这种写法很不标准,shmat的参数有自己定义的符号常量,不要写成0,0这种形式。还有你的cast也搞错了。shmat返回的就是void *,你再cast成void *有什么意义。要cast成char *