Advanced Programming in Unix Environment Episode 2

前端之家收集整理的这篇文章主要介绍了Advanced Programming in Unix Environment Episode 2前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
  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);
}

猜你在找的Bash相关文章