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()函數來實現。