linux下C語言編程6-訊號量函數semget() semop() semctl()

來源:互聯網
上載者:User

semget()


建立一個新的訊號量集,或者使用一個已經存在的訊號量集。
系統調用:semget();
原型:int semget(key_t key, int nsems, int semflg);
參數:第一個參數是關鍵字值(一般是由系統調用ftok()返回的)。
第二個參數nsems指出一個新的訊號量集合中應該建立的訊號量的個數。可以將訊號量集合理解為數組,長度為nsems。最大個數定義在linux/sem.h,我的ubuntu8中最大個數為250
傳回值:如果成功,則返回訊號量集的IPC標識符。如果失敗,則返回-1。
errno不再描述。

semop()


訊號量操作
調用原型:int semop(int semid, struct sembuf *sops,unsigned nsops);
參數:第一個參數是關鍵字值,由semget返回得來。第二個參數是指向將要操作的數組的指標。第三個參數是數組中的操作的個數。nsops為數組sops的大小。
第二個參數結構體如下:
struct sembuf {
    unsigned short      sem_num;        /* 使用第sem_num個訊號量 */
    short            sem_op;        /* 訊號量操作 */
    short            sem_flg;        /* 操作標誌 */
};
sem_num對應訊號集中的號誌,0對應第一個號誌。sem_flg可取IPC_NOWAIT以及SEM_UNDO兩個標誌。如果設定了SEM_UNDO標誌,那麼在進程結束時,相應的操作將被取消,這是比較重要的一個標誌位。如果設定了該標誌位,那麼在進程沒有釋放共用資源就退出時,核心將代為釋放。sem_op的值大於0,等於0以及小於0確定了對sem_num指定的號誌進行的三種操作。
sem_op>0:相應進程要釋放sem_op數目的共用資源;
sem_op=0:用於對共用資源是否已用完的測試;
sem_op<0:進程要申請-sem_op個共用資源。
個人理解:某進程要使用某資源時,先判斷sem_op是否為0,然後設定sem_op>0,使用完後sem_op<0。
傳回值:0,成功。-1,失敗。
errno不再描述。

semctl()


實現對號誌的各種控制操作。
系統調用:semctl();
原型:int semctl(int semid, int semnum, int cmd, union semunarg);
參數:
參數semid指定號誌集,參數semnum指定對哪個號誌操作,參數cmd指定具體的操作類型,只對幾個特殊的cmd操作有意義;semunarg用於設定或返回號誌資訊,代表一個semun執行個體,該參數可以忽略。
參數cmd中可以使用的命令如下:
    ·IPC_STAT讀取一個訊號量集的資料結構semid_ds,並將其儲存在semun中的buf參數中。
    ·IPC_SET設定訊號量集的資料結構semid_ds中的元素ipc_perm,其值取自semun中的buf參數。
    ·IPC_RMID將訊號量集從記憶體中刪除。
    ·GETALL用於讀取訊號量集中的所有訊號量的值。
    ·GETNCNT返回正在等待資源的進程數目。
    ·GETPID返回最後一個執行semop操作的進程的PID。
    ·GETVAL返回訊號量集中的一個單個的訊號量的值。
    ·GETZCNT返回這在等待完全閒置資源的進程數目。
    ·SETALL設定訊號量集中的所有的訊號量的值。
    ·SETVAL設定訊號量集中的一個單獨的訊號量的值。
傳回值:如果成功,則為一個正數。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.