Linux系統呼叫--semctl函式詳解
【semctl系統呼叫】
功能描述:
在指定的訊號集或訊號集內的某個訊號上執行控制操作。
用法:
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
int semctl(int semid, int semnum, int cmd, ...);
引數:
semid:訊號集的識別符號,即是訊號表的索引。
semnum:訊號集的索引,用來存取訊號集內的某個訊號。
cmd:需要執行的命令,有效值有
IPC_STAT //將與semid關聯的核心資料結構拷貝到由arg.buf指標指向的記憶體區。
IPC_SET //將由arg.buf指標指向的semid_ds的一些成員寫入相關聯的核心資料結構,同時更新它的sem_ctime成員。
IPC_RMID //立即刪除訊號集,喚醒所有被阻塞的程序。
IPC_INFO //Linux特有命令,返回系統範圍內關於訊號集的制約和其它引數,並存放在arg.__buf指向的記憶體區。其結構形態如下:
struct seminfo {
int semmap; /* # of entries in semaphore map; unused */
int semmni; /* Max. # of semaphore sets */
int semmns; /* Max. # of semaphores in all semaphore sets */
int semmnu; /* System-wide max. # of undo structures; unused */
int semmsl; /* Max. # of semaphores in a set */
int semopm; /* Max. # of operations for semop() */
int semume; /* Max. # of undo entries per process; unused */
int semusz; /* size of struct sem_undo */
int semvmx; /* Maximum semaphore value */
int semaem; /* Max. value that can be recorded for semaphore adjustment (SEM_UNDO) */
};
SEM_INFO //返回和IPC_INFO相同的資訊,不同點有:semusz欄位包含有當前系統存在的訊號集總量。semaem欄位包含有系統內所有訊號集的訊號總量。
SEM_STAT //返回和IPC_STAT相同的資訊。不過引數semid不是一個訊號集標識,而是核心內部維持所有訊號集資訊的陣列索引。
GETALL //將所有訊號的值存入semun.array中。
GETNCNT //等待訊號值增加的程序的總數。
GETPID //前一個對此訊號進行操作的程序的識別碼。
GETVAL //根據semnun返回訊號的值。
GETZCNT //等待訊號值變為0的程序的總數。
SETALL //將所有semun.array的值設定到訊號集中。
SETVAL //根據semun設定訊號的值。
...:對於不同的命令,可能需要用到也可能不需要,是一個聯合體,原型如下
union semun {
int val; /* Value for SETVAL */
struct semid_ds *buf; /* Buffer for IPC_STAT, IPC_SET */
unsigned short *array; /* Array for GETALL, SETALL */
struct seminfo *__buf; /* Buffer for IPC_INFO (Linux specific) */
};
semid_ds結構體定義在<sys/sem.h>,原型如下
struct semid_ds {
struct ipc_perm sem_perm; /* Ownership and permissions
time_t sem_otime; /* Last semop time */
time_t sem_ctime; /* Last change time */
unsigned short sem_nsems; /* No. of semaphores in set */
};
ipc_perm結構體定義在<sys/ipc.h>,原型如下
struct ipc_perm {
key_t key; /* Key supplied to semget() */
uid_t uid; /* Effective UID of owner */
gid_t gid; /* Effective GID of owner */
uid_t cuid; /* Effective UID of creator */
gid_t cgid; /* Effective GID of creator */
unsigned short mode; /* Permissions */
unsigned short seq; /* Sequence number */
};
返回說明:
成功執行時,根據不同的命令返回不同的非負值
GETNCNT //返回semncnt的值
GETPID //返回sempid的值
GETVAL //返回semval的值
GETZCNT //返回semzcnt的值
IPC_INFO //返回核心內部關於訊號集資訊的最大可用入口索引
SEM_INFO //如同IPC_INFO.
SEM_STAT //返回訊號集標識
剩下的命令返回0。
失敗返回-1,errno被設為以下的某個值
EACCES:訪問出錯,權能不允許
EFAULT:arg.buf 或 arg.array所指的空間不可訪問
EIDRM:訊號集已被刪除
EINVAL;引數無效
EPERM:權能不允許
ERANGE:給出的引數無效
相關推薦
Linux系統呼叫--semctl函式詳解
【semctl系統呼叫】 功能描述: 在指定的訊號集或訊號集內的某個訊號上執行控制操作。 用法: #include <sys/types.h>#include <sys/ipc.h>#include <sys/sem.h> int semctl(int
Linux系統呼叫--fcntl函式詳解
可以用fcntl 函式改變一個已開啟的檔案的屬性,可以重新設定讀、寫、追加、非阻塞等標誌(這些標誌稱為File StatusFlag),而不必重新open 檔案。#include <unistd.h> #include <fcntl.h> int fcntl(int fd, int
Linux系統屬性文件詳解
e2fs ext3 png -h str inode linux spa pre 1)inode概述 中文意思就是索引節點(index node)第一部分是inode 第二部分是block inode主要用來存放文件屬性信息的(也就是ls - l 的結果)包含的屬性信息
Linux系統下的許可權詳解-2
chmod 的用法:chmod 給誰賦於什麼許可權 許可權賦給的物件備註:誰是指使用者、組、其他人;許可權賦給的物件是指目錄或檔案chmod命令舉例如下: 使用字元賦予許可權 [[email protected] ~]# chmod u+x file1 //屬主增加執行[[email pr
Linux下clock gettime函式詳解
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
Linux系統中ls命令詳解
ls命令是linux下最常用的命令。ls命令就是list的縮寫 1. 命令格式: ls [選項,常用引數] [目錄名] 2. 命令功能: 列出目標目錄中所有的子目錄和檔案。 3. 常用引數: -a, –all 列出目錄下的所有檔案,包括以 . 開
Linux 系統設定 : enable 命令詳解
enable命令用於臨時關閉或者啟用指定的shell內部命令。若要執行的檔名稱與shell內建命令相同,可用enable -n來關閉shell內建命令。若不加-n選項,enable可重新啟動關閉的命令。 linux shell命令執行時,shell總是先在自己的shell
Linux 系統設定 : insmod 命令詳解
insmod命令用於將給定的模組載入到核心中。Linux有許多功能是通過模組的方式,在需要時才載入kernel。如此可使kernel較為精簡,進而提高效率,以及保有較大的彈性。這類可載入的模組,通常是裝置驅動程式。 語法 insmod(選項)(引數) 選項 -f:不檢
Linux 系統設定 : lsmod 命令詳解
lsmod命令用於顯示已經載入到核心中的模組的狀態資訊。執行lsmod命令後會列出所有已載入系統的模組。Linux作業系統的核心具有模組化的特性,應此在編譯核心時,務須把全部的功能都放入核心。您可以將這些功能編譯成一個個單獨的模組,待需要時再分別載入。 語法 lsmod
Linux 系統設定 : modprobe 命令詳解
modprobe命令用於智慧地向核心中載入模組或者從核心中移除模組。 modprobe可載入指定的個別模組,或是載入一組相依的模組。modprobe會根據depmod所產生的相依關係,決定要載入哪些模組。若在載入過程中發生錯誤,在modprobe會解除安裝整組的模組。 語
Linux 系統設定 : hwclock 命令詳解
Linux hwclock命令用於顯示與設定硬體時鐘。 在Linux中有硬體時鐘與系統時鐘等兩種時鐘。硬體時鐘是指主機板上的時鐘裝置,也就是通常可在BIOS畫面設定的時鐘。系統時鐘則是指kernel中的時鐘。當Linux啟動時,系統時鐘會去讀取硬體時鐘的設定,之後系統時鐘即
linux send與recv函式詳解
1 #include <sys/socket.h> 2 ssize_t recv(int sockfd, void *buff, size_t nbytes, int flags); 3 ssize_t send(int sockfd, const void *
(筆記)Linux下的ioctl()函式詳解
我這裡說的ioctl函式是指驅動程式裡的,因為我不知道還有沒有別的場合用到了它,所以就規定了我們討論的範圍。寫這篇文章是因為我前一陣子被ioctl給搞混了,這幾天才弄明白它,於是在這裡清理一下頭腦。 一、 什麼是ioctl ioctl是裝置驅動程
linux 系統呼叫sysconf函式使用
在看開原始碼的時候,尤其是獲取cpu核數的時候,發現了一個很好用的一個函式 #include <unistd.h> long sysconf(int name); 通過名字可以猜到,該函式是獲取一些系統的引數。然後通過man sysconf 我
Linux 系統管理 : who 命令詳解
who命令是顯示目前登入系統的使用者資訊。執行who命令可得知目前有那些使用者登入系統,單獨執行who命令會列出登入帳號,使用的終端機,登入時間以及從何處登入或正在使用哪個X顯示器。語法who(選項)(引數)選項-H或--heading:顯示各欄位的標題資訊列; -i或-u或
linux系統開機啟動過程詳解
開機過程指的是從開啟計算機電源直到LINUX顯示使用者登入畫面的全過程。分析LINUX開機過程也是深入瞭解LINUX核心工作原理的一個很好的途徑。 啟動第一步——載入BIOS 當你開啟計算機電源,計算機會首先載入BIOS資訊,BIOS資訊是如此的重要,以至於計
Linux系統中網路配置詳解
從linux誕生的那一天起,就註定了它的網路功能空前地強大.所以在linux系統中如何配置網路,使其高效,安全的工作就顯得十分重要.下面我們就從網路裝置的安裝,網路服務的設定和網路安全性三個方面來介紹一下linux系統中網路的設定. 一.安裝和配置網路裝置 在安裝linu
linux C程式設計--popen函式詳解
#include <stdio.h> FILE *popen(const char *command, const char *type); int pclose(FILE *stream); 描述 popen() 函式 用 建立管道 的 方式 啟動一個 程序, 並呼叫 shell. 因為 管道
Linux 系統管理 : userdel 命令詳解
userdel命令用於刪除給定的使用者,以及與使用者相關的檔案。若不加選項,則僅刪除使用者帳號,而不刪除相關檔案。語法userdel(選項)(引數)選項-f:強制刪除使用者,即使使用者當前已登入; -r:刪除使用者的同時,刪除與使用者相關的所有檔案。引數使用者名稱:要刪除的使
用C++呼叫Lua函式--詳解
首先你要安裝lua的dev,安裝很簡單: yum install lua-devel 即可,很多Linux系統自帶Lua但是沒有dev,有點小坑。 下面是Lua檔案,裡面就兩個函式: function add(a, b) return