系统调用函数说明、参数值及定义
1、fork()
创建一个新进程
intfork()
其中返回int取值意义如下:
0:创建子进程,从子进程返回的id值
大于0:从父进程返回的子进程id值
-1:创建失败
2、lockf(files,function,size):
用作锁定文件的某些段或者整个文件,本函数适用的头文件为:
#include<unistd.h>
参数定义:
intlockf(files,function,size)
intfiles,function;
longsize;
其中:files是文件描述符:function是锁定和解锁;1表示锁定,0表示解锁。size是锁定和解锁的字节数,若用0,表示从文件的当前位置到文件尾。
3、msgget(key,flag):
获得一个消息的描述符,该描述符指定一个消息队列以便用于其他系统调用。
该函数使用偷文件如下:
#include<sy/types.h>
#include<sy/ipc.h>
#include<sy/msg.h>
参数定义
intmsgget(key,flag)
key_tkey;
intflag;
语法格式:msgqid=msgget(key,flag)
其中:msgid是该系统调用返回的描述符,失败则返回-1;flag本身由操作允许权和控制命令值相“或”得到。
如:IP_CREAT|0400是否该队列应被创建;
IP_EXCL|0400是否该队列的创建应是互斥的;等。
4、msgsnd(id,msgp,size,flag):
发送一消息。
该函数是用头文件如下:
#include<sy/types.h>
#include<sy/ipc.h>
#include<sy/msg.h>
参数定义
intmsgnd(id,msgp,size,flag)
intid,size,flag;
structmsgbuf*msgp;
其中:id是返回消息队列的描述符;msgp是指向用户存储区的一个构造体指针,size指示由msgp指向的数据结构中字符数组的长度;即消息的长度。这个数组的最大值由MSG-MAX系统可调用参数来确定。flag规定当核心用尽内部缓冲空间时应执行的动作;若在标志flag中末设置IPC_NOWAIT位,则当该消息队列中字节数超过一最大值时,或系统范围的消息数超过某一最大值时,调用msgsnd进程睡眠。若是设置IPC_NOWAIT,则在此情况下,msgsnd立即返回。
5、msgrcv(id,msgp,size,type,flag):
接受一消息。
该函数调用使用头文件如下:
#include<sy/types.h>
#include<sy/ipc.h>
#include<sy/msg.h>
参数定义
intmsgrcv(id,msgp,size,type,flag)
intid,size,type,flag;
structmsgbuf*msgq;
structsgbuf{longmtpe;chatmtext[];};
语法格式:
count=msgrcv(id,msgp,size,type,flag)
其中:id是用来存放欲接收消息的拥护数据结构的地址;size是msgp中数据数组的大小;type是用户要读的消息类型:
type为0:接收该队列的第一个消息;
type为正:接收类型type的第一个消息;
type为负:接收小于或等于type绝对值的最低类型的第一个消息。
flag规定倘若该队列无消息,核心应当做什么事,如果此时设置了IPC_NOWAIT标志,则立即返回,若在flag中设置了MSG_NOERROR,且所接收的消息大小大于size,核心截断所接受的消息。
count是返回消息正文的字节数。
6、msgctl(id,cmd,buf):
查询一个消息描述符的状态,设置它的状态及删除一个消息描述符。
调用该函数使用头文件如下:
#include<sy/types.h>
#include<sy/ipc.h>
#include<sy/msg.h>
参数定义
intmsgctl(id,cmd,buf)
intid,cmd;
structmsgbuf*msgq;
structmsqid_ds*buf;
其中:函数调用成功时返回0,调用不成功时返回-1。id用来识别该消息的描述符;cmd规定命令的类型。
IPC_START将与id相关联的消息队列首标读入buf。
IPC_SET为这个消息序列设置有效的用户和小组标识及操作允许权和字节的数量。
IPC_RMID删除id的消息队列。
buf是含有控制参数或查询结果的用户数据结构的地址。
附:msgid_ds结构定义如下:
structmsgid_ds
{structipc_permmsg_perm;/*许可权结构*/
shotpadl[7];/*由系统使用*/
ushortonsg_qnum; /*队列上消息数*/
ushortmsg_qbytes; /*队列上最大字节数*/
ushortmsg_lspid; /*最后发送消息的PID*/
ushortmsg_lrpid; /*最后接收消息的PID*/
time_tmsg__stime; /*最后发送消息的时间*/
time_tmsg_rtime; /*最后接收消息的时间*/
me_tmsg_ctime; /*最后更改时间*/
};
structipc_perm
{ushortuid; /*当前用户id*/
ushortgid; /*当前进程组id*/
ushortcuid; /*创建用户id*/
ushortcgid /*创建进程组id*/
ushortmode; /*存取许可权*/
{shotpatl;longpad2} /*由系统使用*/
};
7、shmget(key,size,flag):
获得一个共享存储区。
该函数使用头文件如下:
#include<sy/types.h>
#include<sy/ipc.h>
#include<sy/shm.h>
语法格式:
shmid=shmaget(key,size,flag)
参数定义:
intshmaget(key,size,flag)
key_tkey;
intsize,flag;
其中:size是存储区的字节数,key和flag与系统调用msgget中的参数含义相同。
附:
操作允许权 八进制数
用户可读 00400
用户可读 00200
小组可读 00040
小组可读 00020
其他可读 00004
其他可读 00002
控制命令 值
IPC_CREAT 0001000
IPC_EXCL 0002000
如:shmid=shmget(key,size,(IPC_CREAT|0400));
创建一个关键字为key,长度为size的共享存储区。
8、shmat(id,addr,flag):
从逻辑上将一个共享存储区附接到进程的虚拟地址空间上。
该函数调用使用头文件如下:
#include<sy/types.h>
#include<sy/ipc.h>
#include<sy/msg.h>
参数定义:
char*shmat(id,addr,flag)
intid,flag;
char*addr;
语法格式:virtaddr=shmat(id,addr,flag)
其中:id是共享存储区的标识符,addr是用户要使用共享存储区附接的虚地址,若addr是0,系统是否对应用户规定的地址做舍入操作。如果flag中设置了shm_rnd即表示操作系统在必要时舍去这个地址。如果设置了shm_rdonly,即表示只允许读操作。viraddr是附接的虚地址。
9、shmdt(addr):
把一个共享存储区从指定进程的虚地址空间分开。
调用该函数使用头文件:
#include<sy/types.h>
#include<sy/ipc.h>
#include<sy/mhm.h>
参数定义:
intshmdt(addr)
char*addr
其中,当调用成功时,返回0值,调用不成功,返回-1,addr是系统调用shmat所返回的地址。
10、shmctl(id,cmd,buf):
对与共享存储区关联的各种参数进行操作,从而对共享存储区进行控制。
调用该函数使用头文件:
#include<sy/types.h>
#include<sy/ipc.h>
#include<sy/shm.h>
参数定义:
intshmctl(id,cmd,buf)
intid,cmd;
structshmid_ds*buf;
其中:调用成功返回0,否则返回-1。id为被共享存储区的标识符。cmd规定操作的类型。规定如下:
IPC_STAT:返回包含在指定的shmid相关数据结构中的状态信息,并且把它放置在用户存储区中的*but指针所指的数据结构中。执行此命令的进程必须有读取允许权。
IPC_SET:对于指定的shmid,为它设置有效用户和小组标识和操作存取权。
IPC_RMID:删除指定的shmid以及与它相关的共享存储区的数据结构。
SHM_LOCK:在内存中锁定指定的共享存储区,必须是超级用户才可以进行此项操作。
Buf是一个用户级数据结构地址。
附:
shmid_ds
{structipc_permshm_perm; /*允许权结构*/
intshm_segsz; /*段大小*/
intpadl; /*由系统使用;*/
ushortshm_lpid; /*最后操作的进程id;*/
ushortshm_cpid; /*创建者的进程id;*/
ushortshm_nattch; /*当前附界数;*/
shortpad2; /*由系统使用;*/
time_tshm_atime; /*最后附接时间*/
time_tshm_dtime; /*最后段接时间*/
time_tshm_ctime; /*最后修改时间*/
}
11、signal(sig,function):
允许调用进程控制软中断信号的处理。
头文件为:
#include<signal.h>
参数定义:
signal(sig,function);
intsig;
void(*func)();
其中:sig的值是:
SIGHVP 挂起
SIGINT 键盘按^c键或break键
SIGQUIT 键盘按quit键
SIGILL 非法指令
SIGIOT IOT指令
SIGEMT EMT指令
SIGFPE 浮点运算溢出
SIGKILL 要求终止进程
SIGBUS 总线错
SIGSEGV 段违例
SIGSYS 系统调用参数错
SIGPIPE 向无读者管道上写
SIGALRM 闹钟
SIGTERM 软件终结
SIGUSRI 用户定义信号
SIGUSR2 第二个用户定义信号
SIGCLD 子进程死
SIGPWR 电源故障
function的解释如下:
SIG_DEL:缺省操作。对除SIGPWR和SIGCLD外所有信号的缺省操作是进程终结对信号 SIGQUIT,SIGILL,SIGTRA,SIGIOT,SIGEMT,SIGFPE,SIGBUS,SIGSEGV和SIGSYS它产生一内存映像文件。
SIG_IGN:忽视该信号的出现。
Function:在该进程中的一个函数地址,在核心返回用户态时,它以软中断信号的序号作为参数调用该函数,对除了信号SIGILL,SIGTRAP和SIGTWR以外的信号,核心自动地重新设置软中断信号处理程序的值为SIG_DEL,一个进程不能捕获SIGKILL信号。
相关推荐
当调用函数时如果没有提供这些参数,则会自动使用缺省值。 接下来,本文将通过具体的示例代码来说明以上知识点: ```python def custom_print(): print("Hello, World!") # 调用函数 custom_print() ``` 上述...
当调用函数时,如果没有显式提供这些参数的值,编译器就会使用默认值。这减少了编写重复代码的需求,提高了代码的可读性。例如,一个打印函数可能接受多个参数,如字符串、整数和浮点数。如果大多数时候只使用字符串...
在程序的其他地方,你可以通过函数名和传递实际参数来调用已定义的函数。调用格式如下: ```cpp 返回值 变量名 = 函数名(实际参数, 实际参数, ...); ``` 实际参数的值会赋给形参,然后执行函数体中的代码。例如,...
当调用函数时,实际参数的值被传递给函数的形式参数,然后执行函数体内的代码。函数可以返回一个值,进行类型检查,并且可以有局部变量。这使得函数调用比宏定义更加灵活、安全且强大。 ### 执行过程与性能差异 ##...
通常,编辑器会根据函数参数的数据类型自动生成VAR关键字后面的声明。 `Z_SDN_PATTERN_FUNC_START`可能是另一个与自动填充模式相关的代码片段或示例,可能是用来启动函数调用的模板或模式。这种模式可能包含了一些...
本篇将深入探讨这三个概念,以及如何处理参数传递,特别是数组作为函数参数的情况。 1. **函数的定义**: 函数定义是创建一个函数的过程,它包括函数名、返回类型、参数列表和函数体。例如: ```c int add(int a...
本篇文章将深入探讨如何在C#中调用一个C++DLL,特别是当DLL函数参数中包含指针时的处理方法。 首先,理解C#与C++之间的互操作性是关键。.NET框架提供了一个名为P/Invoke(Platform Invoke)的机制,允许C#代码调用...
C语言函数调用及定义 本节课程主要讲解了C语言函数的定义和调用,...本节课程还提供了多个示例程序,展示了如何定义和调用函数,如何使用函数来编写程序。这些示例程序可以帮助学生更好地理解函数的概念和使用方法。
在实验的第一部分,`SevenDigitsDrawV2.py`脚本展示了如何定义和调用函数来绘制七段数码管。`drawGap()`函数用来绘制数码管的间隔,而`drawLine(draw)`函数绘制单段数码管,根据参数`draw`的值决定是否画线。`...
`CallBackFunction`接受一个类型为`void(*)(int)`的参数,这是一个接受整数并返回无类型值的函数指针。 在C#中,我们不能直接使用函数指针,但可以使用`delegate`类型来模拟。创建一个委托类型与C++的回调函数签名...
对两个整数通过函数调用交换其值,然后输出。首先定义一个函数,3个值交换。在主函数函数声明(可省略),调用函数,输入要交换的两个值
我们将从本任务出发,较为系统的学习Python中函数的定义、调用、函数的形参定义、函数的参数传递以及匿名函数和生成器函数等内容,并掌握相关的配套案例。 任务 IQ智商测试 任务知识点 函数定于与调用 函数参数 匿名...
本章将详细讲解C++中关于函数的各种概念,包括函数的定义、调用以及一些高级特性。 3.1 函数的定义和调用 函数的定义通常包括返回类型、函数名和形参列表。例如: ```cpp int totalbetween(int a, int b) { int ...
6.15 节按值传递参数:使用参数调用函数时,参数的值将传递给参数,这被称为按值传递。 6.16 节变量的范围:函数内定义的变量称为局部变量,而函数外定义的变量称为全局变量。 6.17 节变量的范围:函数外定义的...
4. **在窗体中调用函数**: - **窗体事件**:在VB窗体中,你可以响应用户操作,如按钮点击事件(Button_Click)。在这些事件处理程序中,你可以调用模块中定义的全局函数。 - **显示结果**:计算完成后,可以将...
我们将从本任务出发,较为系统的学习Python中函数的定义、调用、函数的形参定义、函数的参数传递以及匿名函数和生成器函数等内容,并掌握相关的配套案例。 任务 IQ智商测试 任务知识点 函数定义与调用 函数参数 匿名...
3. 函数之间的参数传递和调用关系。 4. 全局变量在多函数环境下的数据共享。 5. 全局变量的潜在问题和最佳实践。 最后,`1.cpp`文件很可能是实现上述描述的C++源代码,它可能包含了`count`、`temp`、`func1`和`func...
这篇博客"ASM函数监听实现(二)之打印注入函数的参数值"深入探讨了如何利用ASM库来监控并记录函数调用时的参数值,这对于调试、日志记录以及性能分析等场景非常有用。 首先,我们来看`asmAopClassAdapter.java`。...
函数调用则是在需要执行该功能的地方,直接写上函数名,后面跟随括号内传入的参数值。例如,如果我们有一个名为`Add`的加法函数: ```csharp public int Add(int num1, int num2) { return num1 + num2; } ``` ...
调用函数时,我们提供实际参数(或实参),它们的值被传入函数,供函数内部使用。例如,调用上述的`max`函数: ```cpp int num1 = 10, num2 = 20; int max_value = max(num1, num2); ``` 4.2 函数的参数传递 参数...