linux 程序通訊 C語言實現

2021-08-10 06:29:53 字數 4354 閱讀 7170

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 ...