日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

linux 访问共享内存,Linux下的共享内存(03)---通过指针访问共享内存中的数据...

發布時間:2025/3/15 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux 访问共享内存,Linux下的共享内存(03)---通过指针访问共享内存中的数据... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

環境:Vmware Workstation;CentOS-6.4-x86_64

說明:

1、將共享內存掛載至進程:void? *shmat(int? shmid, const void *shmaddr,int shmflg);

參數shmid是要附加的共享內存區標示符。

總是把參數shmaddr設為0。

參數shmflg可以為SHM_RDONLY,這意味著附加段是只讀的。

shmat成功返回被附加了段的地址,失敗返回-1,并設置errno。

2、將附在共享內存上的進程分離:int shmdt(const void *shmaddr);

參數必須是掛在函數返回的指針。這個地址必須是shmat返回的。

圖解說明:

程序:

實現一個進程修改共享內存中的數據,另一個進程讀取共享內存中的數據。

步驟:

1、創建并編寫makefile文件:

.SUFFIXES:.c .o

CC=gcc

SRCS1=main1.c

OBJS1=$(SRCS1:.c=.o)

EXEC1=main1

SRCS2=main2.c

OBJS2=$(SRCS2:.c=.o)

EXEC2=main2

start: $(OBJS1) $(OBJS2)

$(CC) -o $(EXEC1) $(OBJS1)

$(CC) -o $(EXEC2) $(OBJS2)

@echo "--------------------------OK------------------------"

.c.o:

$(CC) -Wall -o $@ -c $<

clean:

rm -rf $(OBJS1) $(EXEC1)

rm -rf $(OBJS2) $(EXEC2)

2、通過前面的一個筆記創建一塊共享內存。

[negivup@negivup mycode]$ ipcs -m

------ Shared Memory Segments --------

key shmid owner perms bytes nattch status

0x00000000 229381 negivup 666 1024 0

3、創建并編寫源文件main1.c:

#include #include #include #include int main(int argc, char *args[])

{

// 將進程依附到共享內存上

// 第一個參數是共享內存的shmid,第二個參數和第三個參數都是0

// 函數的返回值是一個指向共享內存的地址,指針類型是void*

void *p_temp = shmat(229381, 0, 0);

// 轉換指針的類型根據要寫入共享內存的數據類型而定

char *p = (char*)p_temp;

// 將字符串拷貝至共享區

strcpy(p, "hello\n");

// 將進程從共享內存上剝離,傳遞的參數是shmat返回的地址

shmdt(p);

return 0;

}4、創建并編寫源文件main2.c:

#include #include #include #include int main(int argc, char *args[])

{

// 將進程依附到共享內存上

// 第一個參數是共享內存的shmid,第二個參數和第三個參數都是0

// 函數的返回值是一個指向共享內存的地址,指針類型是void*

void *p_temp = shmat(229381, 0, 0);

// 轉換指針的類型根據要讀取的共享內存的數據類型而定

char *p = (char*)p_temp;

// 將讀取的內容顯示到屏幕

printf("%s", p);

// 將進程從共享內存上剝離,傳遞的參數是shmat返回的地址

shmdt(p);

return 0;

}

5、編譯并執行程序:

[negivup@negivup mycode]$ make

gcc -Wall -o main1.o -c main1.c

gcc -Wall -o main2.o -c main2.c

gcc -o main1 main1.o

gcc -o main2 main2.o

--------------------------OK------------------------

[negivup@negivup mycode]$ main1 main1是向共享內存中寫入數據

[negivup@negivup mycode]$ main2 main2是從共享內存中讀取數據

hello

PS:根據傳智播客視頻學習整理得出。

總結

以上是生活随笔為你收集整理的linux 访问共享内存,Linux下的共享内存(03)---通过指针访问共享内存中的数据...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。