code:falloc - ikarishinjieva/unixV6-code-analyze-chs GitHub Wiki
- 在file[] 中分配文件结构struct file
- 在u.u_ofile 中 分配 文件打开结构
- 置u.u_ar0[R0]为i,u.u_ofile[i]指向分配的文件打开结构
- 返回值
- 若无法分配,则返回 NULL
- 否则,返回分配的文件结构
6838 /*
6839 * Allocate a user file descriptor
6840 * and a file structure.
6841 * Initialize the descriptor
6842 * to point at the file structure.
6843 *
6844 * no file -- if there are no available
6845 * file structures.
6846 */
6847 falloc()
6848 {
6849 register struct file *fp;
6850 register i;
6851
6852 if ((i = ufalloc()) < 0)
6853 return(NULL);
同时 置u.u_ar0[R0]为i u.u_ofile[i]指向分配的文件打开结构6854 for (fp = &file[0]; fp < &file[NFILE]; fp++)
6855 if (fp->f_count==0) {
6856 u.u_ofile[i] = fp;
6857 fp->f_count++;
6858 fp->f_offset[0] = 0;
6859 fp->f_offset[1] = 0;
6860 return(fp);
6861 }
6862 printf("no file \n");
- 遍历file数组,寻找空闲的元素
- 若找到,则
- u.u_ofile[i] 指向 fp
- 初始化 fp 的参数,参看struct file
6863 u.u_error = ENFILE;
6864 return(NULL);
6865 }
- 若没找到,则
- 打印错误信息
- 抛出错误,错误代码 : ENFILE
- 返回NULL
6866 /* ------------------------- */
6867
6868
6869
6870
6871
6872
6873
6874
6875
6876
6877
6878
6879
6880
6881
6882
6883
6884
6885
6886
6887
6888
6889
6890
6891
6892
6893
6894
6895
6896
6897
6898
6899