加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Advanced Programming in Unix Environment Episode 2

发布时间:2020-12-15 16:21:22 所属栏目:安全 来源:网络整理
导读:文件描述符 文件描述符(file descriptor)通常是一个小的非负整数,内核用一个标识一个特定进程正在访问的文件。当内核打开一个现有文件或创建一个新文件时,它都返回一个文件描述符。在读、写文件时,可以使用这个文件描述符。 标准输入、标准输出和标准错误
  1. 文件描述符
    文件描述符(file descriptor)通常是一个小的非负整数,内核用一个标识一个特定进程正在访问的文件。当内核打开一个现有文件或创建一个新文件时,它都返回一个文件描述符。在读、写文件时,可以使用这个文件描述符。

  2. 标准输入、标准输出和标准错误
    按惯例,每当运行一个新程序时,所有的shell都为其打开3个文件描述符,即标准输入(standard input)、标准输出(standard output)以及标准错误(standard error)。如果不做特殊处理,例如就像简单的命令ls,则3个描述符都链接向终端。大多数shell都提供一种方法,是其中任何一个或所有这3个描述符都能重新定向到某个文件。

  3. 不带缓冲的I/O
    函数open、read、write、lseek以及close提供了不带缓冲的I/O。这些函数都是用文件描述符。

#include <apue.h>

#define BUFFSIZE 4096

int main(void)
{
    int c;
    char buf[BUFFSIZE];

    while((n==read(STDIN_FILENO,buf,BUFFSIZE))>0)
        if(write(STDOUT_FILENO,buff,n)!=n)
            err_sys("write error");

    if(n<0)
        err_sys("read error");

    exit(0);
}
  1. 标准I/O
    标准I/O函数为那些不带缓冲的I/O函数提供了一个带缓冲的接口。使用标准I/O函数无需担心如何选取最佳的缓冲区大小,如BUFFSIZE常量的大小。使用标准I/O函数还简化了对输入行的处理(常常发生在UNIX的应用程序中)。例如,fgets函数读取一个完整的行,而read函数读取指定字节数。
    最常见的函数便是printf。
#include <apue.h>

int main(void)
{
    int c;
    while((c=getc(stdin))!=EOF)
    {
        if(putc(c,stdout)==EOF)
        {
            err_sys("output error");
        }
    }

    if(ferror(stdin))
        err_sys("input error");

    exit(0);
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读