Semaphore&Shared Memory函数

Semaphore 函数

ftok

将路径名和项目标识符转换为System V IPC KEY。

ftok(string $filename, string $project_id): int
#project_id    项目标识符。这必须是一个字符串。

消息队列

常量

#MSG_IPC_NOWAIT    如果没有desired_message_type类型的消息,立即返回,不要阻塞。 函数将失败并返回一个与MSG_ENOMSG对应的整数值。  
#MSG_EXCEPT    将这个标志与大于0的desired_message_type结合使用,将导致函数接收到第一个不等于desired_message_type的消息。  
#MSG_NOERROR    如果消息大于max_message_size,设置此标志将将消息截断为max_message_size,并且不会发出错误信号。
#MSG_EAGAIN     队列太大在不阻塞的情况下继续写入返回这个错误号
#MSG_ENOMSG    队列在读取不阻塞的情况下没有消息可读返回这个错误号

msg_get_queue

返回一个id,该id可用于使用给定的键访问System V消息队列。 第一个调用创建具有可选权限的消息队列。 对相同键的第二次调用msg_get_queue()将返回不同的消息队列标识符,但这两个标识符访问相同的底层消息队列。

msg_get_queue(int $key, int $permissions = 0666): SysvMessageQueue|false
#permissions    队列的权限。 默认为0666。 如果消息队列已经存在,则权限将被忽略。

msg_queue_exists

检查消息队列键是否存在。

msg_queue_exists(int $key): bool

msg_receive

将从desired_message_type指定的类型的指定队列中接收第一个消息。

msg_receive(
    SysvMessageQueue $queue,
    int $desired_message_type,
    int &$received_message_type,
    int $max_message_size,
    mixed &$message,
    bool $unserialize = true,
    int $flags = 0,
    int &$error_code = null
): bool

#desired_message_type    如果desired_message_type为0,则返回队列前面的消息。 如果desired_message_type大于0,则返回该类型的第一个消息。 如果desired_message_type小于0,则将读取队列上第一个类型小于或等于desired_message_type绝对值的消息。 如果没有符合条件的消息,脚本将等待,直到合适的消息到达队列。 可以通过在flags参数中指定MSG_IPC_NOWAIT来防止脚本阻塞。
#received_message_type    接收到的消息的类型将存储在此参数中。
#max_message_size    接收消息的最大大小由max_message_size指定; 如果队列中的消息大于此大小,则函数将失败(除非您设置下面描述的标志)。
#message    接收到的消息将存储在消息中。
#unserialize    如果设置为true,则该消息将被视为使用与会话模块相同的机制进行序列化。
#flags
#error_code    如果函数失败,可选的error_code将被设置为系统errno变量的值。

msg_remove_queue

销毁该队列指定的消息队列。 只有当所有进程都完成了对消息队列的处理,并且您需要释放它所持有的系统资源时,才使用此函数。

msg_remove_queue(SysvMessageQueue $queue): bool

msg_send

向queue指定的消息队列发送类型为message_type(必须大于0)的消息。

msg_send(
    SysvMessageQueue $queue,
    int $message_type,
    string|int|float|bool $message,
    bool $serialize = true,
    bool $blocking = true,
    int &$error_code = null
): bool

#message_type    消息的类型(必须大于0)
#blocking    如果消息太大,无法放入队列,则脚本将等待,直到另一个进程从队列中读取消息,并释放出足够的空间以发送消息。 这叫做阻塞; 你可以通过将可选的blocking参数设置为false来防止阻塞,在这种情况下,如果消息对于队列来说太大,msg_send()将立即返回false,并将可选的error_code设置为MSG_EAGAIN,表示你应该稍后再尝试发送消息。

msg_stat_queue

从消息队列数据结构中返回信息。

msg_stat_queue(SysvMessageQueue $queue): array|false

#msg_perm.uid    队列所有者的uid。
#msg_perm.gid    队列所有者的gid。
#msg_perm.mode   队列的文件访问模式。
#msg_stime    最后一条消息发送到队列的时间。
#msg_rtime    从队列接收到最后一条消息的时间。
#msg_ctime    队列最后一次更改的时间。
#msg_qnum    等待从队列中读取的消息数。
#msg_qbytes    一个消息队列中允许的最大字节数。
#msg_lspid    将最后一条消息发送到队列的进程的pid。
#msg_lrpid    从队列接收到最后一条消息的进程的pid。

msg_set_queue

在消息队列数据结构中设置信息。

msg_set_queue(SysvMessageQueue $queue, array $data): bool

信号量

sem_acquire

获取信号量。默认阻塞,直到可以获取信号量。 当进程试图获取一个已经获取的信号量时,如果获取信号量会导致超过该信号量的最大数量,则该进程将永远阻塞。

sem_acquire(SysvSemaphore $semaphore, bool $non_blocking = false): bool

#non_blocking    指定进程是否不应该等待获取信号量。 如果设置为true,如果不能立即获取信号量,调用将立即返回false。  

sem_get

返回一个id,该id可用于使用给定的键访问System V信号量。
对同一个键的第二次调用sem_get()将返回一个不同的信号量标识符,但两个标识符访问相同的底层信号量。
如果key为0,则为每次调用sem_get()创建一个新的私有信号量。

sem_get(
    int $key,
    int $max_acquire = 1,
    int $permissions = 0666,
    bool $auto_release = true
): SysvSemaphore|false

#max_acquire    设置信号量可以获取的最大进程数
#permissions    信号量的权限
#auto_release    指定在请求关闭时是否应自动释放信号量

sem_release

释放信号量,如果该信号量目前被调用进程获取,否则将生成警告。

sem_release(SysvSemaphore $semaphore): bool

sem_remove

删除给定的信号量。

sem_remove(SysvSemaphore $semaphore): bool

共享内存

shm_attach

创建或打开一个共享内存段。

shm_attach(int $key, ?int $size = null, int $permissions = 0666): SysvSharedMemory|false

#size    内存大小。 如果没有提供,则默认为sysvshm。 php.ini中的Init_mem,否则10000字节。
#permissions    可选的权限位。默认为0666。

shm_detach

断开由shm_attach()创建的shm提供的共享内存。 请记住,共享内存仍然存在于Unix系统中,数据也仍然存在。

shm_detach(SysvSharedMemory $shm): bool

shm_get_var

在给定的共享内存段中返回具有给定键的变量。 变量仍然存在于共享内存中。

shm_get_var(SysvSharedMemory $shm, int $key): mixed

shm_has_var

检查共享内存段中是否存在特定的键。

shm_has_var(SysvSharedMemory $shm, int $key): bool

shm_put_var

使用给定的键插入或更新值如果shm不是一个有效的Sys V共享内存索引,或者没有足够的共享内存来完成您的请求,将会发出警告(E_WARNING级别)。

shm_put_var(SysvSharedMemory $shm, int $key, mixed $value): bool

shm_remove_var

删除具有给定键的变量并释放所占用的内存。

shm_remove_var(SysvSharedMemory $shm, int $key): bool

shm_remove

删除共享内存shm。 所有数据将被销毁。

shm_remove(SysvSharedMemory $shm): bool

Shared Memory函数

共享内存

shmop_open

创建或打开共享内存块。

shmop_open(
    int $key,
    string $mode,
    int $permissions,
    int $size
): Shmop|false

#mode
"a"用于访问(将SHM_RDONLY设置为shmat),当您需要打开一个现有的共享内存段以实现只读时,使用这个标志
"c"用于create(设置IPC_CREATE),当你需要创建一个新的共享内存段,或者如果有一个相同键的共享内存段存在,尝试打开它进行读写时,使用这个标志
"w"用于读写访问,当你需要读写一个共享内存段时,使用这个标志,在大多数情况下使用这个标志
"n"当你想创建一个新的共享内存段,但是如果一个共享内存段已经存在,则会失败。 这对于安全来说很有用,使用它可以防止竞争条件的利用。  

shmop_read

从共享内存块读取数据。

shmop_read(Shmop $shmop, int $offset, int $size): string
#offset    开始读取的偏移量
#size    要读取的字节数

shmop_size

用于获取共享内存块的大小(以字节为单位)。

shmop_size(Shmop $shmop): int

shmop_write

将数据写入共享内存块

shmop_write(Shmop $shmop, string $data, int $offset): int

#offset    指定在共享内存段中从何处开始写入数据。

shmop_delete

用于删除共享内存块。


shmop_delete(Shmop $shmop): bool
``
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇