A. 什麼叫開源的c語言庫
開源是unix系統發展過程中產生的一個詞,意思是開放源代碼。
開源的C語言庫,就是自己可以得到源代碼的C語言庫,可以不斷地改進這個庫中的源代碼,大家共同進步,百家爭鳴,有利於C語言的發展。
B. 在windows下用C語言如何實現socket網路編程,需要用到哪些頭文件或者庫
需要用到的頭文件包含:
#include <winsock2.h>
#include <windows.h>
與Linux環境下socket編程相比,windows環境多了一個步驟:啟動或者初始化winsock庫
Winsock,一種標准API,一種網路編程介面,用於兩個或多個應用程序(或進程)之間通過網路進行數據通信。具有兩個版本:
Winsock 1:
Windows CE平台支持。
頭文件:WinSock.h
庫:wsock32.lib
Winsock 2:
部分平台如Windows CE貌似不支持。通過前綴WSA可以區別於Winsock 1版本。個別函數如WSAStartup、WSACleanup、WSARecvEx、WSAGetLastError都屬於Winsock 1.1規范的函數;
頭文件:WinSock2.h
庫:ws2_32.lib
mswsock.h用於編程擴展,使用時必須鏈接mswsock.dll
(2)c語言進程通信開源庫擴展閱讀
winsock庫的載入與卸載:
載入:int WSAStartup(WORD wVersionRequested, LPWSADATA lpWSAData);
載入成功,返回值為0。
WORD wVersionRequested:載入的winsock版本,使用宏MAKEWORD(x, y),x表示高位元組,y表示低位元組。然而使用時MAKEWORD(2, 2)。高位元組與低位元組相同~~
LPWSADATA lpWSAData:WSADATA結構的指針,傳入參數後,系統幫助我們填充版本信息。有興趣的可以看看結構體內容,不過基本用不著。
卸載:int WSACleanup(void);比起載入,卸載的函數真是輕松愉快。
C. 如何用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;
}
D. c語言有哪些開源圖形庫
最著名的就是GTK了。。。和QT對著乾的那個。。GNOME就是它開發的
還有比如用於游戲的SDL、或者使用腳本的TCL/TK的庫,用於嵌入式的minigui的
最有名的就是GTK了。。。模擬OO封裝,就是學習難度太大了,不亞於winapi。。。
E. C語言有哪些優秀的開源庫
太多了
由於Linux開源
所以 導致各種功能的C開源庫無數
包括所有Linux常用功能,都是開源的
幾個簡單的例子, Linux本身, busybox, QT, gzip, png, jpeg, ffmpeg...