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);
}

相关文章

用的openwrt路由器,家里宽带申请了动态公网ip,为了方便把2...
#!/bin/bashcommand1&command2&wait从Shell脚本并行...
1.先查出MAMP下面集成的PHP版本cd/Applications/MAMP/bin/ph...
1、先输入locale-a,查看一下现在已安装的语言2、若不存在如...
BashPerlTclsyntaxdiff1.进制数表示Languagebinaryoctalhexa...
正常安装了k8s后,使用kubect工具后接的命令不能直接tab补全...