linux中的程序通訊分為三個部分:低階通訊,管道通訊和程序間通訊ipc(inter process communication)。linux的低階通訊主要用來傳遞程序的控制訊號——檔案鎖和軟中斷訊號機制。linux的程序間通訊ipc有三個部分——①訊號量,②共享記憶體和③訊息佇列。以下是我編寫的linux程序通訊的c語言實現**。作業系統為redhat9.0,編輯器為vi,編譯器採用gcc。下面所有實現**均已經通過測試,執行無誤。一.低階通訊--訊號通訊
signal.c
#include
#include
#include
/*捕捉到訊號sig之後,執行預先預定的動作函式*/
void sig_alarm(int sig)
int main()
return 0;
}二.管道通訊
pipe.c
#include
#define buffer_size 30
int main()
/*進入父程序,父程序從管道的另一端讀出剛才寫入的字串*/
else
return 0;
}三.程序間通訊——ipc
①訊號量通訊
sem.c
#include
#include
#include
#include
#include
#include
/*聯合體變數*/
union semun
;/*函式宣告,訊號量定義*/
static int set_semvalue(void); //設定訊號量
static void del_semvalue(void);//刪除訊號量
static int semaphore_p(void); //執行p操作
static int semaphore_v(void); //執行v操作
static int sem_id; //訊號量識別符號
int main(int argc, char *argv)
op_char = 'x';
sleep(5);
}for(i = 0; i < 10; i++)
printf("/n%d - finished/n", getpid());
if (argc > 1)
exit(exit_success);
}/*設定訊號量*/
static int set_semvalue(void)
/*刪除訊號量*/
static void del_semvalue(void)
/*執行p操作*/
static int semaphore_p(void)
return(1);
}/*執行v操作*/
static int semaphore_v(void)
return(1);
}②訊息佇列通訊
send.c
#include
#include
#include
#include
#include
#include
#include
#include
#define max_text 512
/*用於訊息收發的結構體--my_msg_type:訊息型別,some_text:訊息正文*/
struct my_msg_st
;int main()
/*向訊息佇列中傳送訊息*/
while(running)
if (strncmp(buffer, "end", 3) == 0)
}exit(exit_success);
}receive.c
#include
#include
#include
#include
#include
#include
#include
#include
/*用於訊息收發的結構體--my_msg_type:訊息型別,some_text:訊息正文*/
struct my_msg_st
;int main()
/*接收訊息*/
while(running)
printf("you wrote: %s", some_data.some_text);
if (strncmp(some_data.some_text, "end", 3) == 0)
}/*刪除訊息佇列*/
if (msgctl(msgid, ipc_rmid, 0) == -1)
exit(exit_success);
}③共享記憶體通訊
share.h
#define text_sz 2048 //申請共享記憶體大小
struct shared_use_st
;producer.c
#include
#include
#include
#include
#include
#include
#include
#include "share.h"
int main()
/*將共享記憶體連線到乙個程序的位址空間中*/
shared_memory = shmat(shmid, (void *)0, 0);//指向共享記憶體第乙個位元組的指標
if (shared_memory == (void *)-1)
printf("memory attached at %x/n", (int)shared_memory);
shared_stuff = (struct shared_use_st *)shared_memory;
/*生產者寫入資料*/
while(running)
printf("enter some text: ");
fgets(buffer, bufsiz, stdin);
strncpy(shared_stuff->some_text, buffer, text_sz);
shared_stuff->written_by_you = 1;
if (strncmp(buffer, "end", 3) == 0)
}/*該函式用來將共享記憶體從當前程序中分離,僅使得當前程序不再能使用該共享記憶體*/
if (shmdt(shared_memory) == -1)
printf("producer exit./n");
exit(exit_success);
}customer.c
#include
#include
#include
#include
#include
#include
#include
#include "share.h"
int main()
/*將共享記憶體連線到乙個程序的位址空間中*/
shared_memory = shmat(shmid, (void *)0, 0);//指向共享記憶體第乙個位元組的指標
if (shared_memory == (void *)-1)
printf("memory attached at %x/n", (int)shared_memory);
shared_stuff = (struct shared_use_st *)shared_memory;
shared_stuff->written_by_you = 0;
/*消費者讀取資料*/
while(running) }}
/*該函式用來將共享記憶體從當前程序中分離,僅使得當前程序不再能使用該共享記憶體*/
if (shmdt(shared_memory) == -1)
/*將共享記憶體刪除,所有程序均不能再訪問該共享記憶體*/
if (shmctl(shmid, ipc_rmid, 0) == -1)
exit(exit_success);
}
linux下C語言實現守護程序
table of contents 守護程序的實現 守護程序初始化函式 寫乙個測試 編譯後生成可執行檔案 include include include include include include void init deamon else if pid 0 是第一子程序,後台繼續執行 第一自己...
c語言實現TCP socket通訊
tcp面向位元組流傳輸資料,提供可靠的資料傳輸服務。通過tcp傳送的資料無差錯 不丟失 不重 復,而且按序到達。由於tcp是基於連線的,所以每一條tcp連線只能是點到點的互動通訊。伺服器端初始化winsock環境後,便呼叫socket函式建立流式套接字 然後對sockaddr in結構體進行設 置,...
程序互斥(C語言實現)
include pthread.h include sched.h include semaphore.h include stdio.h include windows.h pragma comment lib,pthreadvc2.lib 必須加上這句 pthread t t1 pthread ...