免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4860 | 回复: 16
打印 上一主题 下一主题

[求程序]最短的C程序,能够使得ipcs命令的结果中有它 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-10-27 11:37 |只看该作者 |倒序浏览
10可用积分
如题,求一个最短的C程序,编译结果是a.out,运行起来以后,用ipcs命令可以看到它
----------------------------------------------------
为什么提了上面这个问题呢? 最近在研究进程间通信和消息队列相关的内容,网上说ipcs命令可以看到相关的内容,因此求一个这样的程序,希望能有点注解的那种。
10分敬上,谢谢!!!!!

最佳答案

查看完整内容

改成这样试试,我刚刚在linux上打出来了感觉是权限的问题,呵呵[ 本帖最后由 gawk 于 2008-10-27 14:14 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2008-10-27 11:37 |只看该作者

  1. #include <sys/msg.h>
  2. #include <stdio.h>
  3. int main()
  4. {
  5. int  msgid;
  6. msgid= msgget(
  7.          IPC_PRIVATE,
  8.          IPC_CREAT|IPC_EXCL |0666);
  9. printf("msgid is 0x%x\n",msgid);
  10. scanf("%d",&msgid);
  11. }
复制代码

改成这样试试,我刚刚在linux上打出来了
感觉是权限的问题,呵呵

[ 本帖最后由 gawk 于 2008-10-27 14:14 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2008-10-27 12:56 |只看该作者
你是不会用ipc相关的API呢?还是其他?

想要在ipcs中看到
只需要创建一个ipc资源就能看到

论坛徽章:
0
4 [报告]
发表于 2008-10-27 13:01 |只看该作者
man shmget 共享内存的
man msgget 消息队列的

[ 本帖最后由 gawk 于 2008-10-27 13:02 编辑 ]

论坛徽章:
0
5 [报告]
发表于 2008-10-27 13:09 |只看该作者

  1. #include <sys/msg.h>
  2. #include <stdio.h>
  3. int main()
  4. {
  5. int  msgid;
  6. msgid= msgget(
  7.          IPC_PRIVATE,
  8.          IPC_CREAT|IPC_EXCL );
  9. printf("msgid is 0x%x\n",msgid);
  10. }
复制代码

论坛徽章:
0
6 [报告]
发表于 2008-10-27 13:24 |只看该作者
原帖由 gawk 于 2008-10-27 13:09 发表

#include
#include
int main()
{
int  msgid;
msgid= msgget(
         IPC_PRIVATE,
         IPC_CREAT|IPC_EXCL );
printf("msgid is 0x%x\n",msgid);
}

谢谢,我把上面这个程序稍稍改为
#include <sys/msg.h>
#include <stdio.h>
int main()
{
int  msgid;
msgid= msgget(
         IPC_PRIVATE,
         IPC_CREAT|IPC_EXCL );
printf("msgid is 0x%x\n",msgid);
scanf("%d",&msgid);
}
运行a.out,打印"msgid is 0x10002"
然后在scanf这里程序等待,我在另外一个终端运行ipcs命令,结果没有发现a.out的名称/pid或者是0x10002阿, 如下图。
能解释一下么? 谢谢!

error.jpg (48.51 KB, 下载次数: 52)

error.jpg

论坛徽章:
0
7 [报告]
发表于 2008-10-27 13:27 |只看该作者
我在unix退出后还能看到

  1. msgid is 0x2
复制代码


  1. Message Queues:
  2. T      ID        KEY    MODE         OWNER    GROUP
  3. q       0 0x412d0e08 --rw-------      root   system
  4. q       1          0 -----------       ems    users
  5. q       2          0 -----------       ems    users
复制代码

[ 本帖最后由 gawk 于 2008-10-27 13:31 编辑 ]

论坛徽章:
0
8 [报告]
发表于 2008-10-27 13:35 |只看该作者
原帖由 gawk 于 2008-10-27 13:27 发表
我在unix退出后还能看到

msgid is 0x2



Message Queues:
T      ID        KEY    MODE         OWNER    GROUP
q       0 0x412d0e08 --rw-------      root   system
q       1          0 ----- ...

"你在后面写个循环吧"谢谢,不过没太明白这句话的意思。我把msgget这句话变成了
while(1){
msgid=msgget(...)这样的循环,printf就每次打印0xffffffff,然后我在另一个终端里面还是看不到ipcs打印有关这个进程的信息。

为什么呢?

论坛徽章:
0
9 [报告]
发表于 2008-10-27 13:42 |只看该作者
原帖由 jeanlove 于 2008-10-27 13:35 发表

"你在后面写个循环吧"谢谢,不过没太明白这句话的意思。我把msgget这句话变成了
while(1){
msgid=msgget(...)这样的循环,printf就每次打印0xffffffff,然后我在另一个终端里面还是看不到ipcs打印有关这个进 ...

呵呵,我没仔细看你的代码,我上面已经改了
但是unix下用你的改过的程序,ipcs的确看到了key
linux机器测试一下看了一下的确没有
不过我上面看不了man

论坛徽章:
0
10 [报告]
发表于 2008-10-27 14:02 |只看该作者

回复 #1 jeanlove 的帖子

#include <sys/msg.h>
#include <stdio.h>
int main()
{
int  msgid;
msgid= msgget(
         IPC_PRIVATE,
         IPC_CREAT|IPC_EXCL );
printf("msgid is 0x%x\n",msgid);
scanf("%d",&msgid);
}
应该没有问题的~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP