2016-02-09 67 views
-1

我是linux新手,我嘗試製作服務器(讀取器)和客戶端(作家);
所以客戶端可以用命名管道向服務器發送「Hi」。兩個程序之一在Makefile中命名管道

我寫這兩個程序。當我在Makefile中構建它們時,如何讓它們與命名管道通信?

//server programm: 
#include <fcntl.h> 
#include <stdio.h> 
#include <stdlib.h> 
#include <sys/stat.h> 
#include <sys/wait.h> 
#include <unistd.h> 
#include "fun.h" 
#define MAX_BUF 1024 

int main() 
{ 
int pid,fd,status; 
char * myfifo = "/home/pipe"; 
char buf[MAX_BUF]; 

pid=fork(); 
wait(&status); 
if (pid<0){ 
    exit(1); 
} 
if (pid==0){ 
     mkfifo(myfifo, 0666); 
     fd = open(myfifo, O_RDONLY); 
     main1(); 
     read(fd, buf, MAX_BUF); 
     printf("%s\n", buf); 
    } 
else{ 
     printf("i am the father and i wait my child\n"); 
} 
close(fd); 
return 0; 
} 

//client program: 
#include <fcntl.h> 
#include <sys/stat.h> 
#include <sys/types.h> 
#include <unistd.h> 
#include "fun.h" 

int main1() 
{ 
int fd; 
char * myfifo = "/home/pipe"; 

fd = open(myfifo, O_WRONLY); 
write(fd, "Hi", sizeof("Hi")); 
close(fd); 
unlink(myfifo); 

return 0; 
} 

//fun.h: 
int main1() 

//Makefile: 
all: client.o server.o 
     gcc client.o server.o -o all 

client.o: client.c 
     gcc -c client.c 

server.o: server.c 
     gcc -c server.c 

clean: 
     rm server.o client.o 

以上是迄今爲止我寫的代碼。這是來自其他問題教程和視頻的簡單代碼。

+1

首先讓你的客戶機/服務器在cmd行上工作。然後創建一個shell腳本來管理進程,即使命名管道,在後臺運行服務器,運行客戶端並通過命名管道發送數據,然後關閉/清除。然後,您可以查找如何將調用嵌入到shell腳本到makefile中。祝你好運。 – shellter

+0

謝謝!我相信這是我正在尋找的! – ClockWork

回答

2

你正在構建一個單一的程序,而你需要兩個。

server.c

#include "fun.h" 
// system includes 

int main(int argc, char *argv[]) 
{ 
    // code you put in your main() 
} 

client.c

#include "fun.h" 
// system includes 

int main(int argc, char *argv[]) 
{ 
    // code you put in your main1() 
} 

fun.h

#ifndef __FUN_H__ 
#define __FUN_H__ 

#define MY_FIFO "/home/pipe" 

#endif /* __FUN_H__ */ 

生成文件

INSTALL_PATH=/home/me/mybin/ 

all: server client 

install: all 
    cp server client all.sh $(INSTALL_PATH) 

uninstall: 
    rm -f $(INSTALL_PATH)server $(INSTALL_PATH)client $(INSTALL_PATH)all.sh 

server: server.o 
    gcc server.o -o server 

client: client.o 
    gcc client.o -o client 

server.o: server.c fun.h 
    gcc -c server.c 

client.o: client.c fun.h 
    gcc -c client.c 

.PHONY: all install uninstall 

您將獲得兩個可執行文件,即客戶端和服務器。在不同的xterm中運行它們中的每一個。

+0

首先謝謝你的答案! 你是對的! 我寫了一個程序,當我需要兩個。 但我希望他們在同一個終端中運行它們。 我想讓服務器在後臺運行,客戶端向他發送消息。 我用shell腳本管理它。 現在我想要做的是在Makefile中創建shell腳本並運行它。 – ClockWork

+0

@ClockWork你在「在Makefile中創建shell腳本並運行它」是什麼意思?這個我不清楚。 – jdarthenay

+0

我想創建一個makefile,其中 使用命令在終端make,將生成shell腳本作爲一個可執行文件 ,當我寫./所有它運行shell腳本。 – ClockWork