導航:首頁 > 網路共享 > c語言如何實現數據網路共享

c語言如何實現數據網路共享

發布時間:2023-04-24 04:29:16

A. 如何用C語言實現採用共享內存的進程間通信

共享內存的函數有以下幾個:
(1)int shmget(key_t key, int size, int shmflg),開辟或使用一塊共銷模享內存。
(2)void *shmat(int shmid, const void *shmaddr, int shmflg), 將參數shmid所指向的共享內存與當前進程連接。
當使用某共享內存時,需要先使用shmat,達成連接。
(3)int shmdt(const void *shmaddr),將先前用shmat連接的共享內存與當前進程解除連接。參數shmaddr為shmat返回的共享內存的地址。
在完成對共享內存的使用後,需要使用shmdt解除連接。
(4)int shmctl(int shmid, int cmd, struct shmid_ds *buf),控制內存的操作。當cmd為IPC_RMID時,刪除shmid所指的共享內存。
這些函數的表頭文件為<sys/ipc.h>和<sys/shm.h>

下面給出一個使用共享內存實現進程間通信的例子:進程A開辟一塊新的共享內存,進程B修改這個共享內存,進程C列印輸出這個共享內存的內容,進程D刪除這個共享內存。
進程BCD運行的命令格式為:命令 共享內存ID,如./output 123432。
進程A代碼如下:
int main()
{
int shmid;
shmid = shmget(IPC_PRIVATE, SIZE, IPC_CREAT | 0600);
if (shmid <虧銀緩 0)
{
perror("shmget error");
exit(1);
}
printf("create shared memory OK. shmid=%d/n", shmid);

return 0;
}

進程B代碼如下:
int main(int argc, char *argv[])
{
int shmid;
char *shmaddr;
if (argc != 2)
{
perror("argc error/n");
exit(1);
}

shmid = atoi(argv[1]);
shmaddr = (char *)shmat(shmid, NULL, 0);
if ((int )shmaddr == -1)
{
perror("shmat error./n");
exit(1);
}

strcpy(shmaddr, "hello, world!");

shmdt(shmaddr);

return 0;
}

進程C代碼如下:
int main(int argc, char *argv[])
{
int shmid;
char *shmaddr;
if (argc != 2)
{
printf("argc error/n");
exit(1);
}

shmid = atoi(argv[1]);
shmaddr = (char *)shmat(shmid, NULL, 0);
if ((int )shmaddr == -1)
{
perror("shmat error./n"搏螞);
exit(1);
}

printf("%s/n", shmaddr);

shmdt(shmaddr);

return 0;
}

進程D代碼如下:
int main(int argc, char *argv[])
{
int shmid;
if (argc != 2)
{
perror("argc error/n");
exit(1);
}

shmid = atoi(argv[1]);
shmctl(shmid, IPC_RMID, NULL);

return 0;
}

B. C語言 數組共享式

有一個已排好序(從大到小)的數組有5個元素,從鍵盤輸巧虛入一個數,要求按原排序的規律將它插入到數組中
#include
void main()
{
int i,x,j;
int a[6]={1,5,10,15,20};
scanf("%d",&x);
for(i=0;i<5;i++)
if(x<a[i])
{
j=i; /*當這個數比當前數兄寬漏小時,用j記住當前位置,即j=i,中斷循環。比當前數大時繼續下一個(小應當在左側,大則在右側) */
break;
}
for(i=5;i>=j;i--)
a[i+1]=a[i]; /*將位置j以後的數據都向後移一位*/
a[i+1]=x; /* 把要羨爛插入的數x放到a[i]中,因為i--後 i 比實際要插入的位置少1,所以真正插入的位置應該i+1*/

for(i=0;i<=5;i++) /*這時一共有6個數*/
{
printf("%d ",a[i]);
}
}

C. C++中如何實現一個類的所有對象之間的數據共享

聲明頃亂哪成靜態變數就可以:
如陪碰 class a{
static int a;//共享雀碼變數
}

D. 如何用標准C語言創建出共享內存

分類: 電腦/網路 >> 程序設計 >> 其他編程語高孝言
問題描述:

第一次接觸這個,手邊又沒相關資料.有沒有熱心的高手給詳細的源碼? 感豎並激不盡!

解析:

CPEHelper::CPEHelper(PCSTR lpFileName)

{

hFile = INVALID_HANDLE_VALUE;

hFile = CreateFileA( lpFileName,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);

}

CPEHelper::CPEHelper(PCWSTR lpFileName)

{

hFile = INVALID_HANDLE_VALUE;

hFile = CreateFileW( lpFileName,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);

}

bool CPEHelper::operator !()

{

if (hFile == INVALID_HANDLE_VALUE)

return true;

return false;

}

CPEHelper::~CPEHelper(void)

{

if(hFile != INVALID_HANDLE_VALUE)

CloseHandle(hFile);

}

bool CPEHelper::MappingFile()

{

hMapFile = CreateFileMapping(hFile, NULL, PAGE_READONLY, 0, 0,NULL);

if (hMapFile == NULL)

return false;

lpMapAddress = MapViewOfFile(hMapFile,FILE_MAP_READ,0,0,0);

if (lpMapAddress == NULL)

return false;

return true;

}

void CPEHelper::UnMappingFile()

{

UnmapViewOfFile(lpMapAddress);

CloseHandle(hMapFile);

}

這是余念跡我的一個程序中的一段

希望對你有幫助

E. 如何在進程中定義全局共享數據(C語言實現)

各個廠家的C++語言有自已的一套進程全局共享變數的方法,不通用,如
VC++與C++BUILDER就不一樣的,網上可以搜到文章,是其正的全局變襲孝量共享。
WINDOWS API 提供了一種通拍亮稿用的全局變數共享辦法,鍵念就是利用變數與文件
的映射技術實現的,可以搜到 FileMapping技術實現的共享變數的例子

F. 如何實現數據共享

這是一個很寬泛的問題。
1、簡單的電腦、終端、移動平台的共享 ,可以通過各類系統服務來實現 ,比如FTP、SAMBA伺服器、TFTP、系統 自帶的共享服務 比如微軟的默認共享功能。
2、如果是OA相關的共享 ,可以參考如下塌兄幾點:
1OA大平台集合了HR、CRM、OA三套系統還可以跟據你的業務需求擴展多套小系統,讓你的OA隨著企業的發展一同發展,哪衫世同時具有深度的數據交換,實現數據共享,達到真正的協同管理。
2OA平台的高擴展性和高可變性讓使用者無需IT功底,稍加培訓,就能成為本企業的個性化系統的「開發者」,這樣就能很好的滿企業的個性化需求以及不斷變化的需求,很好的提升了OA辦公系統的生命力,讓你的OA長久不衰。
3為方便用戶,提升用戶打造個性化管理系統的效率,借鑒成熟的管理模式,OA平台上還提供了三套大而全的主流管理軟體OA、HR、CRM,讓企業能更好的構建一體化管理體系!
4OA不是一個簡單的李肢無紙化的軟體,而是一個管理工具,通過它來貫徹企業管理制度的執行,傳播企業文化,通過流程的規范、知識的沉澱、員工的配合和協作來促進企業中人與組織的和諧發展。
求採納,有問題可以繼續問

G. 如何用C語言實現向某個IP發送數據包(例如4個浮點數)

使用socket編程即可。
1、網路的Socket數據傳輸是一種特殊的I/O,Socket也是一種文件描述符。Socket也具有一個類似於打開文件的函數調用Socket(),該函數返回一個整型的Socket描述符,隨後的連接建立、數據傳輸等操作都是通過該Socket實現的。

2、下面用Socket實現一個windows下的c語言socket通信例子,這里客戶端傳遞一個字元串,伺服器端進行接收。

【伺服器端】
#include "stdafx.h"
#include <stdio.h>
#include <winsock2.h>
#include <winsock2.h>
#define SERVER_PORT 5208 //偵聽埠
void main()
{
WORD wVersionRequested;
WSADATA wsaData;
int ret, nLeft, length;
SOCKET sListen, sServer; //偵聽套接字,連接套接字
struct sockaddr_in saServer, saClient; //地址信息
char *ptr;//用於遍歷信息的指針
//WinSock初始化
wVersionRequested=MAKEWORD(2, 2); //希望使用的WinSock DLL 的版本
ret=WSAStartup(wVersionRequested, &wsaData);
if(ret!=0)
{
printf("WSAStartup() failed!\n");
return;
}
//創建Socket,使用TCP協議
sListen=socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (sListen == INVALID_SOCKET)
{
WSACleanup();
printf("socket() faild!\n");
return;
}
//構建本地地址信息
saServer.sin_family = AF_INET; //地址家族
saServer.sin_port = htons(SERVER_PORT); //注意轉化為網路位元組序
saServer.sin_addr.S_un.S_addr = htonl(INADDR_ANY); //使用INADDR_ANY 指示任意地址

//綁定
ret = bind(sListen, (struct sockaddr *)&saServer, sizeof(saServer));
if (ret == SOCKET_ERROR)
{
printf("bind() faild! code:%d\n", WSAGetLastError());
closesocket(sListen); //關閉套接字
WSACleanup();
return;
}

//偵聽連接請求
ret = listen(sListen, 5);
if (ret == SOCKET_ERROR)
{
printf("listen() faild! code:%d\n", WSAGetLastError());
closesocket(sListen); //關閉套接字
return;
}

printf("Waiting for client connecting!\n");
printf("Tips: Ctrl+c to quit!\n");
//阻塞等待接受客戶端連接
while(1)//循環監聽客戶端,永遠不停止,所以,在本項目中,我們沒有心跳包。
{
length = sizeof(saClient);
sServer = accept(sListen, (struct sockaddr *)&saClient, &length);
if (sServer == INVALID_SOCKET)
{
printf("accept() faild! code:%d\n", WSAGetLastError());
closesocket(sListen); //關閉套接字
WSACleanup();
return;
}
char receiveMessage[5000];
nLeft = sizeof(receiveMessage);
ptr = (char *)&receiveMessage;
while(nLeft>0)
{
//接收數據
ret = recv(sServer, ptr, 5000, 0);
if (ret == SOCKET_ERROR)
{
printf("recv() failed!\n");
return;
}
if (ret == 0) //客戶端已經關閉連接
{
printf("Client has closed the connection\n");
break;
}
nLeft -= ret;
ptr += ret;
}
printf("receive message:%s\n", receiveMessage);//列印我們接收到的消息。

}
// closesocket(sListen);
// closesocket(sServer);
// WSACleanup();
}
【客戶端】
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <winsock2.h>
#define SERVER_PORT 5208 //偵聽埠
void main()
{
WORD wVersionRequested;
WSADATA wsaData;
int ret;
SOCKET sClient; //連接套接字
struct sockaddr_in saServer; //地址信息
char *ptr;
BOOL fSuccess = TRUE;
//WinSock初始化
wVersionRequested = MAKEWORD(2, 2); //希望使用的WinSock DLL的版本
ret = WSAStartup(wVersionRequested, &wsaData);
if(ret!=0)
{
printf("WSAStartup() failed!\n");
return;
}
//確認WinSock DLL支持版本2.2
if(LOBYTE(wsaData.wVersion)!=2 || HIBYTE(wsaData.wVersion)!=2)
{
WSACleanup();
printf("Invalid WinSock version!\n");
return;
}
//創建Socket,使用TCP協議
sClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (sClient == INVALID_SOCKET)
{
WSACleanup();
printf("socket() failed!\n");
return;
}
//構建伺服器地址信息
saServer.sin_family = AF_INET; //地址家族
saServer.sin_port = htons(SERVER_PORT); //注意轉化為網路節序
saServer.sin_addr.S_un.S_addr = inet_addr("192.168.1.127");
//連接伺服器
ret = connect(sClient, (struct sockaddr *)&saServer, sizeof(saServer));
if (ret == SOCKET_ERROR)
{
printf("connect() failed!\n");
closesocket(sClient); //關閉套接字
WSACleanup();
return;
}

char sendMessage[]="hello this is client message!";
ret = send (sClient, (char *)&sendMessage, sizeof(sendMessage), 0);
if (ret == SOCKET_ERROR)
{
printf("send() failed!\n");
}
else
printf("client info has been sent!");
closesocket(sClient); //關閉套接字
WSACleanup();
}

H. C語言高手來,共享內存的方法

共享內存豎和用於進程之間通信,如果是多線程,用全局變數+信號量互斥就可以了呀?
非要用的話,一個進程用shmget創建共享內存區,然後用shmat連接共享內存進行訪問
注意要好鄭配合信號量互斥,共享內存本身是沒有同步機制的友纖頌。

I. C語言 建立共享內存

#include <stdio.h>
#include <malloc.h>
#include <string.h>

char *memory, *currentPointer;

void ShareMemory( char function, char *a )
{
switch (function)
{
case 'c':
memory = ( char * )malloc( 65 * sizeof( char ) );
memory[64] = 0;
currentPointer = memory;
break;

case 'r':
printf("%s", memory);
printf("\n");
break;

case 'w':
strcpy( currentPointer, a );
while( *currentPointer != '\0' )
{
currentPointer++;
}
break;

case 'd':
free(memory);
break;

default:
printf("wrong parameter!"李數穗);
}

}

int main()
{
char *a = "aaaaa";
ShareMemory('c', a);
ShareMemory('r', a);
ShareMemory('w', a);
a = "bbbbb";
ShareMemory('w', a);
ShareMemory('r', a);
ShareMemory('d'哪卜畢宏, a);

return 0;
}

J. c語言實現wifi共享就向360免費wifi那種

這個,win 7以上windows系統的話,可以用system函數調用以下命令。(偷懶的做法)

設置wlan熱點:

netshwlansethostednetorkmode=allowssid=hotkey=12345

hot處填熱點名稱,12345除填密碼

開啟熱點:

netshwlanstarthostednetwork

關閉熱點:

netshwlanstophostednetwork

其他的功能你可以網路。


c語言中,可以從鍵盤讀取ssid和密碼,然後構造字元串

netshwlansethostednetorkmode=allowssid=hotkey=12345

然後作為參數調用system()函數來實現。

閱讀全文

與c語言如何實現數據網路共享相關的資料

熱點內容
無限網路連接搜不到網路 瀏覽:867
LTE網路中的eNB指什麼 瀏覽:392
哪個省的網路黑子最多 瀏覽:145
5g網路對手機有要求嗎 瀏覽:197
為什麼網路貓線頭插進去會有火花 瀏覽:494
小貓咪網路什麼意思 瀏覽:418
收不到無線也沒網路 瀏覽:963
1g網路技術是哪個國家發明的 瀏覽:303
wifi需要認證網路 瀏覽:753
米粉卡不能設置網路 瀏覽:856
數據網路自動連接不上怎麼辦 瀏覽:688
新手機沒網路怎麼激活 瀏覽:628
繽瑞網路如何開通 瀏覽:87
電腦網路空間無限寬 瀏覽:211
網路與新媒體和醫學哪個好 瀏覽:702
共享單車網路連接 瀏覽:951
計算機網路設計課程設計實踐作業 瀏覽:689
無線網路的貓往哪個孔上插 瀏覽:808
駕照網路考試復核成功後做些什麼 瀏覽:35
小米石頭掃地機如何連接網路 瀏覽:476

友情鏈接