zoukankan      html  css  js  c++  java
  • [每日一点]msgsnd函数代码跟踪

    今天有一同事问我,如果msgsnd函数的最后一个flag如果直接置0,调用该函数会是什么结果!

    我不太清楚是怎样的,还是直接看代码:

    msgsnd是一个系统调用,所以它在glibc中只是一个桩函数:
    \glibc\glibc-2.4.src\sysvipc\msgsnd.c
    int
    msgsnd (msqid, msgp, msgsz, msgflg)
         int msqid;
         const void *msgp;
         size_t msgsz;
         int msgflg;
    {
      __set_errno (ENOSYS);
      return -1;
    }

    stub_warning (msgsnd)

    而在内核中的实现函数:

    ~\kernel\linux-2.6.21.1.src\ipc\msg.c

    Code
    Code

    security_msg_queue_msgsnd函数是调用一个钩子函数,之后没有对flag进行处理。所以,flag只在这个函数中有效:

    即,只有在队列满,且标志位与IPC_NOWAIT或时不为0,则返回错误,否则没有什么影响。如果为0时,与IPC_NOWAIT取或运算显然为不0,所以会阻塞在这里,直到队列可用!

    ================================
      /\_/\                        
     (=^o^=)  Wu.Country@侠缘      
     (~)@(~)  一辈子,用心做一件事!
    --------------------------------
      学而不思则罔,思而不学则怠!  
    ================================
  • 相关阅读:
    DOM--3 DOM核心和DOM2 HTML(3)
    js-其他
    DOM--3 DOM核心和DOM2 HTML(2)
    DOM--3 DOM核心和DOM2 HTML(1)
    插入视频(youtube)
    DOM--2 创建可重用的对象
    safari的坑
    DOM--1 遵循最佳实践
    mvc-5视图和模版
    mvc-4控制器和状态(2)
  • 原文地址:https://www.cnblogs.com/WuCountry/p/1506202.html
Copyright © 2011-2022 走看看