pipe()为何可能返回EFAULT?数组无效的含义是什么

pipe()为什么可能返回EFAULT?数组无效的含义是什么?
pipe()函数调用,如果输入的数组fd无效,那么就会返回EFAULT。可是我不能理解的是什么叫做数组无效,我传入一个地址给pipe,pipe内部怎么知道我传的数组有两个元素? 我传一个多元素的数组给pipe()也行啊,只是调用完以后,只有前两个有效。
如果我传入的数组只有一个元素,那么访问第二个元素的时候,必然要崩溃,也没有机会返回一个错误代码,对吧?

那到底什么才是"无效"数组呢?

------解决思路----------------------
内核有内核的虚拟地址空间,进程有进程的虚拟地址空间,copy_to_user就是将内核空间的数据拷贝到用户空间中。
这段代码在内核源码目录的fs/pipe.c文件里。