(a) feels entirely wrong. I think it maybe okay in antiquated language or maybe non-American dialects, but it's not normal speech for the American dialect. (b) and (c) are both fine and I'd have trouble describing what is different between them.
I guess, if we already know that he *didn't* know, then (b) expresses that we didn't know until we checked whether or not he knew, while (c) expresses that if the situation had been different, it would have been possible for him to know.
In the (probably more normal?) case that we still don't know what he knew, the two are almost indistinguishable.
In all cases, the normal sentence would be 'He ___ have known.' or 'He ___ have known that.'
'He ___ have known that fact' in itself feels like a textbook example substituting in for something like 'He could have known that she was a spy' (or whatever other 'He ___ have known that ___' sentence where the second blank is an independent clause that he may/might/could have known.)