C 函数回调和进程间通信是否相同?

C 函数回调和进程间通信是否相同?,c,operating-system,function-pointers,inter-process-communicat,C,Operating System,Function Pointers,Inter Process Communicat,几天前,在一次采访中,有人问我一个问题 Are function callback in C and interprocess communication are same? 我在那个问题上有点中立,因为我进退两难。在IPC中,如果我们看到进程只不过是一个函数,那么我们最终会在进程之间进行通信。这里一个函数调用另一个函数。在函数回调中,我们再次使用函数指针,即一个函数调用另一个具有地址的函数。 所以我只是想知道,虽然它们不完全相同,但有什么不同呢?不,不完全一样 函数回调是将一个函数的地址(

几天前,在一次采访中,有人问我一个问题

Are  function callback in C and interprocess communication are same?
我在那个问题上有点中立,因为我进退两难。在IPC中,如果我们看到进程只不过是一个函数,那么我们最终会在进程之间进行通信。这里一个函数调用另一个函数。在函数回调中,我们再次使用
函数指针
,即一个函数调用另一个具有地址的函数。 所以我只是想知道,虽然它们不完全相同,但有什么不同呢?

不,不完全一样

函数回调是将一个函数的地址(或其他标识符)传递给另一个函数,以便它可以出于某种原因回调

典型的例子是C标准库
qsort
函数。传入一个指向数组(及其大小)的指针以及一个比较函数。然后,
qsort
函数使用该比较函数(回调)来决定列表中任意两个元素中哪个更大,以便可以按顺序排列它们

另一方面,IPC是进程之间进行通信的一种手段,如共享内存、管道、信号量等


一些IPC机制可能会使用回调,但这并不是必需的。例如,套接字不使用回调,它们只允许用户调用
read
write

与共享内存类似,您附加到内存块并简单地访问它们,就像“常规”内存一样,只是在附加到该内存的所有进程中都能感受到效果

一种使用回调的方法是ONC-RPC(或Sun-RPC)。它运行一个服务器,该服务器通过网络等待客户端调用,并将它们传递给预配置的客户端函数。可以找到更多细节


但是,即使这样,我也会犹豫是否将其称为回调,因为它实际上是在编译时配置的。“适当的”回调通常在运行时完成。

函数回调意味着调用者和被调用者在同一个线程中。IPC处于不同的过程中。进程由一个或多个线程组成。因此,回调不是IPC。

+1在简单性和灵活性方面无法击败这个(这个版本的)答案comprehensiveness@paxdiablo:函数回调:-某些原因意味着获取一些数据…因此,我们通过使用套接字或管道从IPC获得的数据是一样的,所有“一些IPC机制可能使用回调,但这绝对不是必需的。”-如果可以详细说明这一点就好了。