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@侠缘      
     (~)@(~)  一辈子,用心做一件事!
    --------------------------------
      学而不思则罔,思而不学则怠!  
    ================================
  • 相关阅读:
    C#=>递归反转栈
    C#=> 栈模仿堆的操作
    C# 栈=>随时读取栈中最小值
    vijos1574 摇钱树
    (二叉)堆
    分块大法好
    list
    动态规划——状压、树形
    区间动规平行四边形优化
    最长公共子序列(LCS)
  • 原文地址:https://www.cnblogs.com/WuCountry/p/1506202.html
Copyright © 2011-2022 走看看