共享内存

    科技2022-07-15  134

    int shmget(key_t key, size_t size, int shmflg); //size:共享内存至少分配1兆(1024)大小

    //创建或获取一个共享内存,成功返回共享内存ID,失败返回-1。

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

    //连接共享内存到当前进程的地址空间;//成功返回指向共享内存的指针,失败返回-1。

    int shmdt(const void *shmaddr);

    //断开与共享内存的连接;成功返回0,失败返回-1。

    int shmctl(int shmid, int cmd, struct shmid_ds *buf);

    //控制共享内存相关信息;成功返回0,失败返回-1。//cmd:IPC_RMID删除该共享内存。

    查看存在的共享内存:ipcs -m

    删除共享内存:ipcrm -m 12312(id号) 

     创建共享内存:

    #include <sys/ipc.h> #include <sys/shm.h> #include <sys/types.h> #include <stdio.h> #include <string.h>

    int main() {         int shmid;         char *shamadd;

            key_t key;         key = ftok(".",1);

            shmid = shmget(key,1024*4,IPC_CREAT|0600);  //创建共享内存

            shamadd = shmat(shmid,0,0);   //返回值为指向共享内存指针         printf("shmat is ok\n");

            strcpy(shamadd,"creat is success!");

            shmdt(shamadd)// 断开与共享内存的连接

            sleep(5);   //等待其他进读取完成后再删除该共享内存         shmctl(shmid,IPC_RMID,0);  //删除共享内存

            printf("quit\n");     return 0; }

    获取共享内存:

    int main() {         int shmid;         char *shamadd;

            key_t key;         key = ftok(".",1);

            shmid = shmget(key,1024*4,0);  //获取共享内存

            shamadd = shmat(shmid,0,0);         printf("shmat success\n");

            printf("data : %s\n",shamadd);

            shmdt(shamadd);

            printf("quit\n");

            return 0; }

    Processed: 0.010, SQL: 8