linux 函数

1) 创建/获取共享内存
int shmget (key_t key, size_t size, int shmflg);

  • A. 该函数以key参数为键值创建共享内存,或获取已有的共享内存。
  • B. size参数为共享内存的字节数, 建议取内存页字节数(4096)的整数倍。
    若希望创建共享内存,则必需指定size参数。
    若只为获取已有的共享内存,则size参数可取0。
  • C. shmflg取值:
    0 - 获取,不存在即失败。
    IPC_CREAT - 创建,不存在即创建,
    已存在即获取,除非…
    IPC_EXCL - 排斥,已存在即失败。
  • D. 成功返回共享内存标识,失败返回-1。

2) 加载共享内存

void* shmat (int shmid, const void* shmaddr,int shmflg);

  • A. 将shmid参数所标识的共享内存,映射到调用进程的地址空间。
  • B. 可通过shmaddr参数人为指定映射地址,也可将该参数置NULL,由系统自动选择。
  • C. shmflg取值:
    0 - 以读写方式使用共享内存。
    SHM_RDONLY - 以只读方式使用共享内存。
    SHM_RND - 只在shmaddr参数非NULL时起作用。
    表示对该参数向下取内存页的整数倍,作为映射地址。
  • D. 成功返回映射地址,失败返回-1。
  • E. 内核将该共享内存的加载计数加1

3) 卸载共享内存
int shmdt (const void* shmaddr);

  • A. 从调用进程的地址空间中,取消由shmaddr参数所指向的,共享内存映射区域。
  • B. 成功返回0,失败返回-1。
  • C. 内核将该共享内存的加载计数减1。
  • 4) 销毁/控制共享内存

4)wait函数

pid_t wait(int *status)

功能:
        阻塞并等待子进程退出 
        回收子进程残留资源 
        获取子进程结束状态(退出原因)
返回值:
    成功:清理掉的子进程ID
    失败:-1 (没有子进程)    
参数:子进程的退出状态 -- 传出参数
    1.    WIFEXITED(status):为非0    → 进程正常结束
            WEXITSTATUS(status):
            如上宏为真,使用此宏 → 获取进程退出状态 (exit/return)的参数)
    2.    WIFSIGNALED(status):为非0 → 进程异常终止
            WTERMSIG(status):
            如上宏为真,使用此宏 → 取得使进程终止的那个信号的编号。

原文链接:https://blog.csdn.net/zxy131072/article/details/89477344 

5)sighandler_t signal (int signum,sighandler_t handler); 

  1. signum  - 信号码,也可使用系统预定义的常量宏,如SIGINT等。
  2. handler - 信号处理函数指针或以下常量:                                                             SIG_IGN: 忽略该信号;SIG_DFL: 默认处理。
  3. 成功返回原来的信号处理函数指针或SIG_IGN/SIG_DFL常量,
  4. 失败返回SIG_ERR。
  • 1) 在某些Unix系统上,通过signal函数注册的信号处理函数只一次有效。
    即内核每次调用信号处理函数前,会将对该信号的处理自动恢复为默认方式。
    为了获得持久有效的信号处理,可以在信号处理函数中再次调用signal函数,重新注册一次。

 6)int kill (pid_t pid, int sig);

  • #include <signal.h>
  • 成功返回0,失败返回-1。
  • pid > 0 - 向pid进程发送sig信号。
  • pid = 0 - 向同进程组的所有进程发送信号。
  • pid = -1 - 向所有进程发送信号,
  • 前提是调用进程有向其发送信号的权限。
  • pid < -1 - 向绝对值等于pid的进程组发信号。
  • 0信号为空信号。
  • 若sig取0,则kill函数仍会执行错误检查,
  • 但并不实际发送信号。这常被用来确定一个进程是否存在。
  • 向一个不存在的进程发送信号,会返回-1,且errno为ESRCH。

7)int pause (void);

#include <unistd.h>

使调用进程进入睡眠状态,直到有信号终止该进程或被捕获。

只有调用了信号处理函数并从中返回以后,该函数才会返回。

该函数要么不返回(未捕获到信号),要么返回-1(被信号中断),errno为EINTR。

 相当于没有时间限制的sleep函数。

 8)int system (const char* command);

#include <stdlib.h>

1、标准C函数。执行command,成功返回command对应进程的终止状态,失败返回-1。

2、若command取NULL,返回非零表示shell可用,返回0表示shell不可用。

3、该函数的实现,调用了fork、exec和waitpid等函数,其返回值:

  • 1) 如果调用fork或waitpid函数出错,则返回-1。
  • 2) 如果调用exec函数出错,则在子进程中执行exit(127)。
  • 3) 如果都成功,则返回command对应进程的终止状态(由waitpid的status输出参数获得)。
    4、使用system函数而不用fork+exec的好处是,system函数针对各种错误和信号都做了必要的处理。

9)unsigned int alarm (unsigned int seconds);

 #include <unistd.h>

1.   使内核在seconds秒之后,向调用进程发送SIGALRM(14)闹钟信号。

2、SIGALRM信号的默认处理是终止进程。

3、若之前已设过定时且尚未超时,则调用该函数会重新设置定时,并返回之前定时的剩余时间。

4、seconds取0表示取消之前设过且尚未超时的定时。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值