请你谈谈共享内存相关的api

Linux允许不同进程访问同一个逻辑内存,提供了一组API,头文件在sys/shm.h中。

1)新建共享内存

shmget int shmget(key_t key,size_t size,int shmflg);

key:共享内存键值,可以理解为共享内存的唯一性标记。

size:共享内存大小

shmflag:创建进程和其他进程的读写权限标识。 返回值:相应的共享内存标识符,失败返回-1

2)连接共享内存到当前进程的地址空间

shmat void *shmat(int shm_id,const void *shm_addr,int shmflg);

shm_id:共享内存标识符

shm_addr:指定共享内存连接到当前进程的地址,通常为0,表示由系统来选择。

shmflg:标志位 返回值:指向共享内存第一个字节的指针,失败返回-1

3)当前进程分离共享内存shmdt int shmdt(const void *shmaddr);

4)控制共享内存shmctl 和信号量的semctl函数类似,控制共享内存

   int shmctl(int shm_id,int command,struct shmid_ds *buf); shm_id:共享内存标识符

command:有三个值

  1. IPC_STAT:获取共享内存的状态,把共享内存的shmid_ds结构复制到buf中。
  2. IPC_SET:设置共享内存的状态,把buf复制到共享内存的shmid_ds结构。
  3. IPC_RMID:删除共享内存 buf:共享内存管理结构体。

 

Linux允许不同进程访问同一个逻辑内存,提供了一组API,头文件在sys/shm.h中。
1)新建共享内存shmget

int shmget(key_t key,size_t size,int shmflg);

key:共享内存键值,可以理解为共享内存的唯一性标记。

size:共享内存大小

shmflag:创建进程和其他进程的读写权限标识。

返回值:相应的共享内存标识符,失败返回-1

2)连接共享内存到当前进程的地址空间shmat

void *shmat(int shm_id,const void *shm_addr,int shmflg);

shm_id:共享内存标识符

shm_addr:指定共享内存连接到当前进程的地址,通常为0,表示由系统来选择。

shmflg:标志位

返回值:指向共享内存第一个字节的指针,失败返回-1

3)当前进程分离共享内存shmdt

int shmdt(const void *shmaddr);

4)控制共享内存shmctl

和信号量的semctl函数类似,控制共享内存

int shmctl(int shm_id,int command,struct shmid_ds *buf);

shm_id:共享内存标识符

command: 有三个值

IPC_STAT:获取共享内存的状态,把共享内存的shmid_ds结构复制到buf中。

IPC_SET:设置共享内存的状态,把buf复制到共享内存的shmid_ds结构。

IPC_RMID:删除共享内存

buf:共享内存管理结构体。
 

函数指针:

1、定义 函数指针是指向函数的指针变量。 函数指针本身首先是一个指针变量,该指针变量指向一个具体的函数。

这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。 C在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。

有了指向函数的指针变量后,可用该指针变量调用函数,就如同用指针变量可引用其他类型变量一样,在这些概念上是大体一致的。

2、用途: 调用函数和做函数的参数,比如回调函数。

3、示例: char * fun(char * p)  {…}       // 函数fun char * (*pf)(char * p);             // 函数指针pf pf = fun;                        //函数指针pf指向函数fun pf(p);                        //通过函数指针pf调用函数fun

 

请你讲讲如何采用单线程的方式处理高并发?

在单线程模型中,可以采用I/O复用来提高单线程处理多个请求的能力,

然后再采用事件驱动模型,基于异步回调来处理事件来 。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值