写消息文件:msg.proto
1 2 3 4 5 6 7 |
package lm; message helloworld { required int32 id = 1; // ID required string str = 2; // str optional int32 opt = 3; //optional field } |
将消息文件msg.proto映射成cpp文件
protoc -I=. –cpp_out=. msg.proto
可以看到生成了
msg.pb.h 和msg.pb.cc
6> 写序列化消息的进程
write.cc
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
#include "msg.pb.h" #include <fstream> #include <iostream> using namespace std; int main(void) { lm::helloworld msg1; msg1.set_id(101); msg1.set_str("hello"); fstream output("./log", ios::out | ios::trunc | ios::binary); if (!msg1.SerializeToOstream(&output)) { cerr << "Failed to write msg." << endl; return -1; } return 0; } |
编译 write.cc
1 |
g++ msg.pb.cc write.cc -o write `pkg-config --cflags --libs protobuf` -lpthread |
执行write
./write, 可以看到生成了log文件
7> 写反序列化的进程
reader.cc
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
#include "msg.pb.h" #include <fstream> #include <iostream> using namespace std; void ListMsg(const lm::helloworld & msg) { cout << msg.id() << endl; cout << msg.str() << endl; } int main(int argc, char* argv[]) { lm::helloworld msg1; { fstream input("./log", ios::in | ios::binary); if (!msg1.ParseFromIstream(&input)) { cerr << "Failed to parse address book." << endl; return -1; } } ListMsg(msg1); } |
编译:g++ msg.pb.cc reader.cc -o reader pkg-config --cflags --libs protobuf
-lpthread
执行./reader 输出 :
101
hello
8> 写Makefile文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
all: write reader clean: rm -f write reader msg.*.cc msg.*.h *.o log proto_msg: protoc --cpp_out=. msg.proto write: msg.pb.cc write.cc g++ msg.pb.cc write.cc -o write `pkg-config --cflags --libs protobuf` reader: msg.pb.cc reader.cc g++ msg.pb.cc reader.cc -o reader `pkg-config --cflags --libs protobuf` |
发表评论
要发表评论,您必须先登录。