当前位置:  技术问答>linux和unix

一个不理解的程序段??

    来源: 互联网  发布时间:2016-01-28

    本文导语:  int main() {     int shmid;     char *shmaddr;     struct shmid_ds buf;     shmid = shmget(KEY, SIZE, IPC_CREAT | 0600);     if(shmid == -1) { printf("create share memory failed: %sn",strerror(errno)); return 0;     }     printf("befor...

int main()
{
    int shmid;
    char *shmaddr;
    struct shmid_ds buf;

    shmid = shmget(KEY, SIZE, IPC_CREAT | 0600);
    if(shmid == -1) {
printf("create share memory failed: %sn",strerror(errno));
return 0;
    }
    printf("before if...else... n");
    if(fork() == 0) {
    ————————
shmaddr = (char *)shmat(shmid, NULL, 0);
if(shmaddr == (void *)-1) {
    printf("connect to the share memory failed: %sn", strerror(errno));
    return 0;
}
        strcpy(shmaddr, "hello, this is a child process!");
shmdt(shmaddr);

return 0;
         —————

    }
    else {
    ————
sleep(3);
shmctl(shmid, IPC_STAT, &buf);
printf("size of the share memory: shm_segsz = %d bytes n", 
       buf.shm_segsz);
printf("process id of creater: shm_cpid = %d n", buf.shm_cpid);
printf("process id of the last operator: shm_lpid = %d n", 
       buf.shm_lpid);

shmaddr = (char *)shmat(shmid, NULL, 0);
if(shmaddr == (void *)-1) {
    printf("connect the share memory failed: %s n", strerror(errno));
    return 0;
}
printf("print the content of the share memory: %s n", shmaddr);
shmdt(shmaddr);
shmctl(shmid, IPC_RMID, NULL);
    }
}

这段程序是《linux边干边学》中的一个例子,

上面有下划线的部分,是个if语句,在fork子进程中,最后使用了return 0 语句,但

是,好像也没有退出main函数, 接着执行了else部分的语句;好像没有这个

if...else...一样,不知道为什么?

|
从fork开始,程序一份为二。
也就是说,fork后有2个程序在同时执行。一个程序进入了if{},另一个程序进入了else{}

|
是父进程执行的吧,吧进程号打印出来就知道了!

    
 
 

您可能感兴趣的文章:

  • 如何准确理解“程序”、“进程”、“线程”这三个概念
  • 什么设备的驱动程序便于学习理解?键盘、鼠标?
  • 关于运行程序的一个不理解
  • 谁能真正的理解这个程序运行过程,请讲讲?
  • 关于子进程的所谓调用excelp以执行另一个程序,有点不理解。
  • 求解:书上一个例子有一条语句不理解(附程序)在线等待…………
  • ”整型变量j说明为volatile,这样就阻止了优化程序除去循环语句“ 这么理解这句话,为什么会除去循环语句?
  • 求解:书上一个例子有一条语句不理解(附程序),欢迎讨论、在线等待…………
  • 请各位老大帮忙看看,我的程序出现的错误,本人没法理解。
  • 关于fork(),有一段程序不理解。
  • jsp 对request.getSession(false)的理解(附程序员常疏忽的一个漏洞)
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • system.map文件的作用和理解 iis7站长之家
  • 分布式系统的故障独立性如何理解
  • 对TCP协议状态及状态转换理解
  • 套接字应该怎么理解
  • c/c++内存堆分配和栈分配理解
  • 如何理解fork函数返回2次啊?
  • 请问下面一句话应该怎样理解?
  • 句柄?句柄?“句柄”到底是什么东西?怎样理解?
  • unsigned char modeflags :5;是如何来理解?
  • 问一个《深入理解计算机系统》中的问题
  • 深度理解try{}cathc(){}
  • 深入理解PHP内核 TIPI
  • 求最容易理解,最容易上手的java书籍,servlet书籍,请指教,谢谢!!
  • 在JTree中的USEROBJECT有什么用处,我一直不理解?
  • 如何理解ResourceBundle和Locale?和应用的场合?谢谢
  • 100分求:哪儿有《深入理解linux内核》可供下哉!
  • System.gc();怎么理解?
  • system.map文件的作用和理解
  • sembuf.sem_num到底如何理解?--初学者向各位请教
  • makefile这句话应该则怎么理解
  • 求教linux的ARCH ?= $(XXX)中符号“?=”怎么理解?先谢过


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,