栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

1. Unix基础

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

1. Unix基础

1.5 输入和输出 1. 文件描述符

  内核打开或者创建一个新文件时,都会返回一个文件描述符,用以标识一个特定进程正在访问的文件,通常是一个非负整数。在读写文件时,可以使用这个文件描述符。

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

  每当运行一个程序,shell都为其打开3个文件描述符,即:标准输入、标准输出和标准错误。默认情况下,这三个描述符链接向终端,shell提供了一种方法,使得其中任一个描述符可以重定向到某个文件。

3. 不带缓冲的IO

  读写文件函数:open、read、write、lseek、和close提供了不带缓冲的IO,这些函数都使用文件描述符。

  1. 实例
#incude "apue.h"
#define BUFSIZE 4096
int main(void)
{
	int n;
	char buf[BUFSIZE];
	while (n = read(STDIN_FILENO, buf, BUFSIZE) > 0)
	{
		if(write(STDOUT_FILENO, buf, n) != n)
			err_sys("write error");
	}
	if(n < 0)
	{
		err_sys("read error");
	}
	exit(0);
}

  头文件 包含了头文件,包含了STDIN_FILENO和STDOUT_FILENO,他们指定了标准输入和标准输出的文件描述符。
  read函数返回读取的字节数,用于要写的字节数。当到达文件末尾时,read返回0,程序停止执行。如果发生了读错误,read返回-1.
  将该程序编译成a.out文件,以下方式执行:
     

  • . /a.out > data
      那么标准输入是终端 (默认情况,文件描述符链接向终端) ,标准输出重定向至文件data,标准错误也是终端。如果此文件不存在,则shell会创建它,改程序将键盘输入各行复制到标准输出,键入文件结束符(Ctrl+D)时,将终止本次复制。
  • . /a.out outfile
      会将文件名为infile的文件的内容复制到outfile文件.
4.标准IO

  标准IO是为不带缓冲的IO函数提供了带缓冲的接口,让我们无需考虑缓冲区的大小。例如常用的printf函数.
实例

#include "apue.h"
int main(void)
{
	int c;
	while(c=getc(stdin) != EOF)
		if(putc(c, stdout) == EOF)
			err_sys("out put error");

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

	exit(0);
}
5. 出错处理

  系统出错时,通常会返回负值,整形变量errno通常被设置为具有特定信息的值.
  文件中定义了errno以及各种可以赋予它的变量.
  C标准定义了两个函数,用于打印出错信息:

  1. char *strerror(int errnum) //将errnum(通常就是errno)映射为一个出错字符串,返回指针
  2. void perror(const char *msg); 基于errno的当前值,将标准错误上产生一条错误信息,然后返回。
6.系统调用和库函数

  系统调用是程序向内核请求服务的入口点,应用代码可以直接使用系统调用.
  库函数可以使用系统调用,也可能不使用,但不能直接接触内核.
  系统调用由系统提供,不可更改,但库函数我们可以更改,可以把库函数理解为写的通用的应用代码.

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/320624.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号