Linux_1_文件——文件描述符

来源:互联网 发布:sql如何建立级联 编辑:程序博客网 时间:2024/06/08 11:09
* 文件描述符 -文件描述符是个很小的正整数,调试一个索引值,指向内核为每个进程所维护的该进程打开文件的记录表。 -例如:每个进程启动时都打开3个文件:* 标准输入文件 STDIN_FILENO  0* 标准输出 STDOUT_FILENO  1* 标准出错 STDERR_FILENO  2 -这三个文件分别对应文件描述符0、1、2 -编程中应该使用<unistd.h>中定义的STDIN_FILENO、STDOUT_FILENO、STDRR_FILENO代替数字0、1、2。
#include<stdio.h>#include<stdlib.h>#include<unistd.h>int main(void){char buf[10];memset(buf,0,sizeof(buf));read(STDIN_FILENO,buf,sizeof(buf));//自己实现了scanfprintf("%s",buf);return EXIT_SUCCESS;}
* 给予文件描述符的I/O操作兼容POSIX标准,所以移植行比较好。* 许多Linux、Unix系统都依赖于文件描述符。* 尤其是TCP/IP操作只能通过文件描述符执行输入输出。* 在Linux上几乎每样东西都是一个文件。* 这样大量资源,比如内存,磁盘空间,进程间通信,声卡,鼠标都有了一个统一的编程接口。* 使用文件描述符    * 打卡和关闭文件描述符。
     #include<sys/types.h>        #include<sys/stat.h>        #include<fcntl.h>        #include<unistd.h>        int open(const char *pathname,int flags);        int close(int fd);
* open试图打开参数pathname中的一个文件。* 可在Linux的man命令中查看  man 3 open  3代表C语言函数* 参数flags制定访问该文件的方式。* 必须把flags设置为O_RDONLY、O_WRONLY、O_RDWR、O_CREAT、O_APPEND分别表示只读、只写、读写、如果文件不存在就创建、追加。* open成功后会返回一个文件描述符。* open失败后会返回-1,病设置errno变量。
#include<stdio.h>#include<stdlib.h>#include<sys/types.h>#include <sys/stat.h>#include <fcntl.h>int main(void){char s[]="abc.txt";int fd=open(s,O_RDONLY);}
* open试图打开一个不存在的文件,返回-1* 如果想知道更多详细的错误描述,请使用errno和strerror函数
#include<stdio.h>#include<stdlib.h>#include<string.h>#include<unistd.h>#include<sys/types.h>#include<sys/stat.h>#include<fcntl.h>#include<errno.h>int main(void){char buf[]="abc.txt";close(STDOUT_FILENO);//先关闭当前本窗口的标准输出,以便用其他窗口输出,默认是以当前窗口输出,用tty命令可以查看窗口文件//int fd=open(buf,O_RDONLY);int fd1=open("/dev/pts/1",O_WRONLY);//打开设备文件/dev/pts/1,该设备作为标准输出文件描述符int fd=open(buf,O_RDONLY);int i=0;while(1){sleep(1);printf("%d      %d:::%d\n",fd,fd1,i++);//printf语句将会打印到/dev/pts/1上}//close(fd);close(fd1);return EXIT_SUCCESS;}

这个程序让我知道在linux中,窗口也是一个文件,/dev/pts/1是一个窗口文件
这里写图片描述

原创粉丝点击