1. 错误处理与错误号cat /usr/include/asm-generic/errno-base.h#define EPERM 1 /* Operation not per mitted */#define ENOENT 2 /* No suc h file or director y */#define ESRCH 3 /* No suc h proc ess */#define EINTR 4 /* Interrupted s y stem call */#define EIO 5 /* I/O error */#define ENXIO 6 /* No such dev ice or address */#define E2BIG 7 /* Argument list too long */#define ENOEXEC 8 /* Ex ec format error */#define EBADF 9 /* Bad file number */#define ECHILD 10 /* No c hild process es */#define EAGAIN 11 /* Try again */#define ENOMEM 12 /* Out of memor y */#define EACCES 13 /* Per mission denied */#define EFAULT 14 /* Bad address */#define ENOTBLK 15 /* Bl oc k dev ice required */#define EBUSY 16 /* Dev ice or resource bus y */#define EEXIST 17 /* File ex ists */#define EXDEV 18 /* Cross-dev ice link */#define ENODEV 19 /* N o suc h dev ice */#define ENOTDIR 20 /* Not a direc tor y */#define EISDIR 21 /* Is a director y */#define EINVAL 22 /* Inv alid argument */#define ENFILE 23 /* File table ov erflow */#define EMFILE 24 /* Too many open files */#define ENOTTY 25 /* Not a ty pewriter */#define ETXTBSY 26 /* Text file bus y */#define EFBIG 27 /* File too large */#define ENOSPC 28 /* N o space l eft on dev ic e */#define ESPIPE 29 /* Illegal seek */#define EROFS 30 /* Read-onl y file s y s tem */#define EMLINK 31 /* T oo many link s */#define EPIPE 32 /* Brok en pipe */#define EDOM 33 /* Math argument out of domain of func */ #define ERANGE 34 /* M ath r esult not repres entabl e */1.1 用错误常数显示错误信息函数strerror()可以把一个错误常数转换成一个错误提示语句。
char *strerror(int errnum);#include <stdi o.h>#include <string.h>#include <errno.h>int main(){int i;for(i=1;i<15;i++){printf("Errno:%d ",i);printf("Message:%s/n",s trerror(i));}}2. 创建与删除目录2.1 创建目录函数mk dir()int mkdir(char *pathname,mode_t mode);pathname //是一个字符型指针,表示需要创建的目录路径。
mode //表示权限的八进制数字作用:创建目录返回值:创建成功返回整数0,否则返回-1头文件:“sy s/types.h”“sy s/s tat.h”可能返回的错误常数:EPERM:目录中有不合规则的名字EEXIST:参数pathname所指的目录已存在EFAULT:pathname指向了非法的地址EACCESS:权限不足,不允许创建目录ENAMETOOLONG:参数pathname太长ENOENT:所指的上级目录不存在ENOTDIR:参数pathname不是目录ENOMEM:核心内存不足EROFS:欲创建的目录在只读文件系统内ELOOP:参数pathname有多个符合的链接ENOSPC:磁盘空间不足#include <stdi o.h>#include <s y s/types.h>#include <s y s/stat.h>#include <errno.h>int main(){ex tern int errno;char *path="/root/tmp11";if(mk dir(path,0766)==0){printf("created the direc tor y %s./n",path);}else{printf("cann't create the director y %s/n",path);printf("errno:%d/n",errno);printf("Message:%s/n",s trerror(errno));}return 0;}2.2 删除目录函数rmdir()int rmdir(char *pathname);pathname //需要删除的目录字符的头指针作用:删除目录返回值:删除成功则返回一个整型0,否则返回-1 函数可能发生的错误:EACCESS:权限不足,不允许创建目录EBUSY:系统繁忙,没有删除EFAULT:pathname指向了非法的地址EINVAL:有这个目录,但不能删除ELOOP:参数pathnaem有多个符合的链接ENAMETOOLONG:给出的参数太长ENOENT:所指向的上级目录不存在ENOMEM:核心内存不足ENOTDIR:不是一个目录EROFS:指向的目录在一个只读目录里#include <stdi o.h>#include <s y s/types.h>#include <s y s/stat.h>#include <errno.h>int main(){ex tern int errno;char *path="/root/tmp11";if(rmdir(path,0766)==0){printf("deleted the directory %s./n",path);}else{printf("cann't delete the director y %s/n",path);printf("errno:%d/n",errno);printf("Message:%s/n",s trerror(errno));}return 0;}3. 文件的创建和删除3.1 创建文件函数creat()int creat(c har *pathname,mode_t mode);pathname //需要建立文件的文件名和目录名mode //文件的权限作用:在目录中建立一个空文件回返值:创建成功时返回创建文件的编号,否则返回-1头文件:#include <s y s/types.h>#include <s y s/stat.h>#include <fc ntl.h>creat函数可能发生的错误:EEXIST:参数pathname所指的目录已存在EACCESS:参数pathname所指定的文件不符合所要求测试的权限EROFS:欲打开写入权限的文件存在于只读文件系统内EFAULT:参数pathname指针超出可存取的内存空间EINVAL:参数mode不正确ENAMETOOLONG:参数pathname太长ENOTDIR:参数pathname为一目录ENOMEM:核心内在不足ELOOP:参数pathname有过多符号链接问题EMFILE:已达到进程可同时打开的文件数上限3.2 删除文件函数remove()int remov e(char *pathname);pathname //需要删除的目录作用:删除文件返回值:删除成功则返回0,不成功为-1头文件:#include <stdi o.h>可能发生的错误:EACCESS:权限不足,不允许删除文件EBUSY::系统繁忙,没有删除EFAULT:pathname指向了非法的地址EINVAL:有这个目录,但是不能删除ELOOP:参数pathname有多个符合的链接ENAMETOOLONG:参数pathname太长ENOENT:所指向的上级目录不存在ENOMEM:核心内存不足ENOTDIR:不是一个目录EROFS:指向的目录在一个只读的目录里3.3 建立临时文件函数mk stemp()int mk s temp(char *template);template //所指的文件名称必须声明为数组,文件名字符串中最后六个字符必须是“XXXXXX”作用:建立临时文件,在机器重新启动后自动删除这个创建的临时文件返回值:打开文件的编号,如果建立不成功的话返回-1注意:template 所指的文件名称必须声明为数组,且最后六个字符必须是“XXXXXX”如:char template[]="template-XXXXXX";可能发生的错误:EEXIST:文件同名错误EINVAL:参数templ ate的最后六位不是“XXXXXX”/*Debian编译有问题*/#include <stdi o.h>#include <stdlib.h>int main(){ex tern int errno;char *path="my temp-XXXXXX";if(mk stemp(path)!=-1){printf("create temp file %s./n",path);}else{printf("cann't create temp file %s/n",path);printf("errno:%d/n",errno);printf("Message:%s/n",s trerror(errno));}return 0;}4. 文件的打开与关闭4.1 打开文件函数open()int open(c har *pathname,int flags);int open(c har *pathname,int flags,mode_t mode);pathname //所打开的路径和文件名flags //文件的打开方式mode //打开文件的权限作用:打开文件头文件:#include <s y s/types.h>#include <s y s/stat.h>#include <fc ntl.h>文件的打开方式设置:O_RDONLY:以只读方式打开文件O_WRONLY:以只写方式打开文件O_RDWR:以可读写方式打开文件上述三种旗标是互斥的,也就是不可同时使用,但可与下列的旗标利用“|”运算组合。