什么是进程? 这个早已经被问了无数遍了。 进程无非就是程序运行的一个实例。 你登录QQ, 那么就启动了一个QQ进程。 你再登录一个QQ, 又启用了另外一个QQ进程。 那一年, 我无聊地登录了5-6个QQ, 那是, 我启动了5-6个QQ进程。 不过, 那时候, 我还不知道什么是进程。
三年前, 需要用matlab对视频进行裁剪, 需要用C对视频进行编码和解码, 然后又需要利用matlab对数据进行分析和可视化。为了使一切过程自动化运行, 需要好好控制matlab程序和C程序的运行, 注意数据交换和传递。那时候, 我用了最简单最原始的进程通信方法。 为了方便起见, 现在仅仅简单模拟一下。
说明, 在后面的博文中, 我们会学习“共享内存”的方法实现进程间的通信, 所以, 我将本文所介绍的最基本的最原始的进程间通信方式命名为“共享外存/共享文件”
进程1对应的代码为:
#include <stdio.h>
int main()
{
FILE *fp = fopen("test.txt", "w");
if(NULL == fp)
{
return 1;
}
int c = 97;
fputc(c, fp);
fclose(fp);
return 0;
}
进程2对应的代码为:
#include <stdio.h>
int main()
{
FILE *fp = fopen("test.txt", "r");
if(NULL == fp)
{
return 1;
}
int c = fgetc(fp);
fclose(fp);
printf("%d\n", c);
return 0;
}
进程1把数据写入文件, 进程2从文件中读取数据。 可见, 这两个进程间的通信是通过文件来完成的。 当然了, 这是一种最原始最简单的进程通信方式, 操作系统提供了更多更好的进行间通信方式, 我们将逐步来学习这些进行通信方式(实际上, 我们学过的socket编程就是一种很好的进程通信方式)。
进程间为什么要通信呢? 这个问题等价于: 人和人为什么要交流?也等价于:人和人为什么发生联系/关系? 所以, 这是个不答自明的问题。