前面我们实现了完整的TCP通信, 现在我们可以来考虑为通信加上日志记录的功能. 实现日志记录可以直接将数据写入文件中.
管道实现日志记录
这里采用管道实现进程间通信, 通过一个单独的进程来记录日志.
主要用到的就是文件的创建, 无名管道以及进程间通信的方法.
以下是删除了大部分的服务端代码, 只留下了修改过后的代码. 这里采用的是带缓冲的fwrite
函数实现向文件里写入数据. 因为采用的fwrite
是全缓冲, 所以在写完数据之后必须使用fflush
函数将缓冲区的内容真正的写入到文件中. 如果没有这个步骤, 那么日志就不会有任何数据记录了.
void doService(int servicefd)
{
...
// 初始化管道, 保证进程间通信
int fds[2];
pipe(fds);
pid_t pid;
if((pid = fork()) < 0)
exit(1);
else if(pid == 0){
FILE *fp;
char buf[1024];
int len;
while(1)