工学1号馆

home

Unix输入与输出

By Wu Yudong on March 07, 2016

本文主要简单介绍Unix输入输出

文件描述符

文件描述符通常是一个小的非负整数,内核用以标识一个特定进程正在访问的文件

标准输入、输出和标准错误

每当运行一个新程序的时候,所有的shell都为其打开3个文件描述符:标准输入、输出和标准错误

不带缓存的I/O

函数open、read、write、lseek、close提供了不带缓存的I/O,这些函数都使用文件描述符

举个例子:

复制任一Unix普通文件

#include"apue.h"
#define BUFFSIZE 4096

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

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

read函数返回读取的字节数,当到达输入文件的尾端时,read返回0,程序停止执行。如果发生一个读错误,返回-1

编译上面的程序:

./a.out > data

这种情况下复制的是从终端的输入到文件data,键入文件结束符Ctrl+D

若以下列方式执行

./a.out  < infile > outfile

则是从infile复制到outfile

经过实践发现,每次目标文件都将重新清空后再复制

标准I/O

标准I/O函数为那些不带缓冲的I/O函数提供了一个带缓冲的接口

举个例子:

同样实现复制Unix任一文件的功能

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

如果文章对您有帮助,欢迎点击下方按钮打赏作者

Comments

No comments yet.
To verify that you are human, please fill in "七"(required)