Linux_1_文件——文件描述符

* 文件描述符

 -文件描述符是个很小的正整数,调试一个索引值,指向内核为每个进程所维护的该进程打开文件的记录表。
 -例如:每个进程启动时都打开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));//自己实现了scanf
printf("%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是一个窗口文件
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值