🐶博主主页:@ᰔᩚ. 一怀明月ꦿ
❤️🔥专栏系列:线性代数,C初学者入门训练,题解C,C的使用文章,「初学」C++,linux
🔥座右铭:“不要等到什么都没有了,才下定决心去做”
🚀🚀🚀大家觉不错的话,就恳求大家点点关注,点点小爱心,指点指点🚀🚀🚀
目录
fd的分配规则
进程默认已经打开了0,1,2,我们可以直接使用0,1,2进行数据访问
[BCH@hcss-ecs-6176 11_28]$ cat myfile.c #include<stdio.h> #include<sys/types.h> #include<sys/stat.h> #include<fcntl.h> #include<unistd.h> #include<string.h> #define FILE_NAME "log.txt" int main() { char buf[1024]; ssize_t s=read(0,buf,1024); //ssize_t有符号整型 //read的返回值是实际读取的字节数,1024是我们设置最大读取的字节数,buf接收数据的缓冲区 //从fd所指向的文件中读取数据放到buf中 if(s>0) { buf[s]=0;//将中实际读取的最后一个字符尾加上0 //printf("%s\n",buf); write(1,buf,strlen(buf));//将读取的buf的数据,输出到fd(1)指向的文件,1指向的就是标准输出流,屏幕 } return 0; }
文件描述符的分配规则:寻找最小的,没有被使用的数据位置,分配给指定的打开文件
[BCH@hcss-ecs-6176 11_28]$ cat myfile.c #include<stdio.h> #include<sys/types.h> #include<sys/stat.h> #include<fcntl.h> #include<unistd.h> #include<string.h> #define FILE_NAME "log.txt" int main() { close(0);//关闭fd==0的文件,标准输入流被关闭(键盘) int fd=open(FILE_NAME,O_CREAT | O_WRONLY | O_TRUNC,0666); if(fd<0) { perror("open"); return 1; } printf("%s :fd:%d\n",FILE_NAME,fd);//输出被创建的FILE_NAME “log.txt"的文件描述符 close(fd); return 0; } [BCH@hcss-ecs-6176 11_28]$ ./myfile log.txt :fd:0//此时创建的文件的文件描述符为0 [BCH@hcss-ecs-6176 11_28]$ cat myfile.c #include<stdio.h> #include<sys/types.h> #include<sys/stat.h> #include<fcntl.h> #include<unistd.h> #include<string.h> #define FILE_NAME "log.txt" int main() { close(2);//关闭fd==2的文件,标准错误流流被关闭(屏幕) int fd=open(FILE_NAME,O_CREAT | O_WRONLY | O_TRUNC,0666); if(fd<0) { perror("open"); return 1; } printf("%s :fd:%d\n",FILE_NAME,fd);//输出被创建的FILE_NAME “log.txt"的文件描述符 close(fd); return 0; } [BCH@hcss-ecs-6176 11_28]$ ./myfile log.txt :fd:2//此时创建的文件的文件描述符为2 [BCH@hcss-ecs-6176 11_28]$ cat myfile.c #include<stdio.h> #include<sys/types.h> #include<sys/stat.h> #include<fcntl.h> #include<unistd.h> #include<string.h> #define FILE_