首页 服务器 编程 必备知识 搜索引擎 圩日手册
站内搜索
最近浏览
推荐文章
热文排行

收藏.C.库函数手册.卷二


int read(int handle,void *buf,int nbyte)从文件号为handle的文件中读nbyte个字符
   存入buf中
int   _read(int handle,void *buf,int nbyte)从文件号为handle的文件中读nbyte个字符
   存入buf中,直接调用MSDOS进行操作.
int write(int handle,void *buf,int nbyte)将buf中的nbyte个字符写入文件号
   为handle的文件中
int   _write(int handle,void *buf,int nbyte)将buf中的nbyte个字符写入文件号
   为handle的文件中
int dup(int handle) 复制一个文件处理指针handle,返回这个指针
int dup2(int handle,int newhandle) 复制一个文件处理指针handle到newhandle
int eof(int *handle)检查文件是否结束,结束返回1,否则返回0
long   filelength(int handle) 返回文件长度,handle为文件号
int setmode(int handle,unsigned mode)本函数用来设定文件号为handle的文件的打
   开方式
int getftime(int handle,struct ftime *ftime) 读取文件号为handle的文件的时间,
       并将文件时间存于ftime结构中,成功返回0,ftime结构如下:
       ┌─────────────────┐
       │struct ftime                                                 │
       │{                                                                │
       │ unsigned ft_tsec:5; /*秒*/                          │
       │ unsigned ft_min:6;   /*分*/                         │
       │ unsigned ft_hour:5; /*时*/                          │
       │ unsigned ft_day:5;   /*日*/                          │
       │ unsigned ft_month:4;/*月*/                      │
       │ unsigned ft_year:1; /*年-1980*/                │
       │ }                                                                 │
       └─────────────────┘
int setftime(int handle,struct ftime *ftime) 重写文件号为handle的文件时间,
   新时间在结构ftime中.成功返回0.结构ftime如下:
       ┌─────────────────┐
│struct ftime                                                 │
│{                                                                │
│ unsigned ft_tsec:5; /*秒*/                          │
│ unsigned ft_min:6;   /*分*/                          │
│ unsigned ft_hour:5; /*时*/                      │
│ unsigned ft_day:5;   /*日*/                          │
│ unsigned ft_month:4;/*月*/                      │
│ unsigned ft_year:1; /*年-1980*/                 │
│ }                                                                │
└─────────────────┘
long   lseek(int handle,long offset,int fromwhere) 本函数将文件号为handle的文件
       的指针移到fromwhere后的第offset个字节处.
      SEEK_SET 文件开关 SEEK_CUR 当前位置 SEEK_END 文件尾
long   tell(int handle) 本函数返回文件号为handle的文件指针,以字节表示
int isatty(int handle)本函数用来取设备handle的类型
int lock(int handle,long offset,long length) 对文件共享作封锁
int unlock(int handle,long offset,long length) 打开对文件共享的封锁
int close(int handle) 关闭handle所表示的文件处理,handle是从_creat、creat、
       creatnew、creattemp、dup、dup2、_open、open中的一个处调用获得的文件处理
       成功返回0否则返回-1,可用于UNIX系统
int   _close(int handle) 关闭handle所表示的文件处理,handle是从_creat、creat、
   creatnew、creattemp、dup、dup2、_open、open中的一个处调用获得的文件处理
   成功返回0否则返回-1,只能用于MSDOS系统

FILE *fopen(char *filename,char *type) 打开一个文件filename,打开方式为type,
       并返回这个文件指针,type可为以下字符串加上后缀
   ┌──┬────┬───────┬────────┐
   │type │读写性   │文本/2进制文件│建新/打开旧文件 │
   ├──┼────┼───────┼────────┤
   │r    │读    │文本       │打开旧的文件 │
   │w     │写    │文本       │建新文件        │
   │a    │添加 │文本       │有就打开无则建新│
   │r+     │读/写 │不限制        │打开          │
   │w+ │读/写 │不限制        │建新文件        │
   │a+ │读/添加 │不限制        │有就打开无则建新│
   └──┴────┴───────┴────────┘
   可加的后缀为t、b。加b表示文件以二进制形式进行操作,t没必要使用
   例: ┌──────────────────┐
      │#include<stdio.h>                                            │
      │main()                                                             │
      │{                                                                       │
      │ FILE *fp;                                                       │
      │ fp=fopen("C:\WPS\WPS.EXE","r+b");        │
      └──────────────────┘
FILE *fdopen(int ahndle,char *type)
FILE *freopen(char *filename,char *type,FILE *stream)
int getc(FILE *stream)   从流stream中读一个字符,并返回这个字符
int putc(int ch,FILE *stream)向流stream写入一个字符ch
int getw(FILE *stream) 从流stream读入一个整数,错误返回EOF
int putw(int w,FILE *stream)向流stream写入一个整数
int ungetc(char c,FILE *stream) 把字符c退回给流stream,下一次读进的字符将是c
int fgetc(FILE *stream) 从流stream处读一个字符,并返回这个字符
int fputc(int ch,FILE *stream) 将字符ch写入流stream中
char *fgets(char *string,int n,FILE *stream) 从流stream中读n个字符存入string中
int fputs(char *string,FILE *stream) 将字符串string写入流stream中
int fread(void *ptr,int size,int nitems,FILE *stream) 从流stream中读入nitems
   个长度为size的字符串存入ptr中
int fwrite(void *ptr,int size,int nitems,FILE *stream) 向流stream中写入nitems
   个长度为size的字符串,字符串在ptr中
int fscanf(FILE *stream,char *format[,argument,…]) 以格式化形式从流stream中
   读入一个字符串
int vfscanf(FILE *stream,char *format,Valist param) 以格式化形式从流stream中
   读入一个字符串,参数从Valist param中取得
int fprintf(FILE *stream,char *format[,argument,…])   以格式化形式将一个字符
   串写给指定的流stream
int vfprintf(FILE *stream,char *format,Valist param)   以格式化形式将一个字符
   串写给指定的流stream,参数从Valist param中取得
int fseek(FILE *stream,long offset,int fromwhere) 函数把文件指针移到fromwhere
   所指位置的向后offset个字节处,fromwhere可以为以下值:
   SEEK_SET 文件开关 SEEK_CUR 当前位置 SEEK_END 文件尾
long   ftell(FILE *stream)   函数返回定位在stream中的当前文件指针位置,以字节表示
int rewind(FILE *stream) 将当前文件指针stream移到文件开头
int feof(FILE *stream) 检测流stream上的文件指针是否在结束位置
int fileno(FILE *stream) 取流stream上的文件处理,并返回文件处理
int ferror(FILE *stream) 检测流stream上是否有读写错误,如有错误就返回1
void   clearerr(FILE *stream) 清除流stream上的读写错误
void   setbuf(FILE *stream,char *buf) 给流stream指定一个缓冲区buf
void   setvbuf(FILE *stream,char *buf,int type,unsigned size)
   给流stream指定一个缓冲区buf,大小为size,类型为type,type的值见下表
   ┌───┬───────────────────────────────┐
   │type值│意义                                                           │
   ├───┼───────────────────────────────┤
   │_IOFBF│文件是完全缓冲区,当缓冲区是空时,下一个输入操作将企图填满整个缓 │
   │    │冲区.在输出时,在把任何数据写到文件之前,将完全填充缓冲区.                 │
   │_IOLBF│文件是行缓冲区.当缓冲区为空时,下一个输入操作将仍然企图填整个缓   │
   │    │冲区.然而在输出时,每当新行符写到文件,缓冲区就被清洗掉.                   │
   │_IONBF│文件是无缓冲的.buf和size参数是被忽略的.每个输入操作将直接从文 │
   │    │件读,每个输出操作将立即把数据写到文件中.                                           │
   └───┴───────────────────────────────┘
int fclose(FILE *stream) 关闭一个流,可以是文件或设备(例如LPT1)
int fcloseall()       关闭所有除stdin或stdout外的流
int fflush(FILE *stream) 关闭一个流,并对缓冲区作处理
       处理即对读的流,将流内内容读入缓冲区;
       对写的流,将缓冲区内内容写入流。成功返回0
int fflushall()       关闭所有流,并对流各自的缓冲区作处理
       处理即对读的流,将流内内容读入缓冲区;
       对写的流,将缓冲区内内容写入流。成功返回0

int access(char *filename,int amode) 本函数检查文件filename并返回文件的属性,
       函数将属性存于amode中,amode由以下位的组合构成
      06可以读、写    04可以读 02可以写 01执行(忽略的) 00文件存在
   如果filename是一个目录,函数将只确定目录是否存在
   函数执行成功返回0,否则返回-1
int chmod(char *filename,int permiss) 本函数用于设定文件filename的属性
       permiss可以为以下值
          S_IWRITE允许写   S_IREAD允许读   S_IREAD|S_IWRITE允许读、写
int   _chmod(char *filename,int func[,int attrib]);
   本函数用于读取或设定文件filename的属性,
   当func=0时,函数返回文件的属性;当func=1时,函数设定文件的属性
   若为设定文件属性,attrib可以为下列常数之一
   FA_RDONLY只读   FA_HIDDEN隐藏   FA_SYSTEM系统


接口子程序,所在函数库为:dos.h、bios.h
Code:
unsigned sleep(unsigned seconds)暂停seconds微秒(百分之一秒)
int    unlink(char *filename)删除文件filename
unsigned FP_OFF(void far *farptr)本函数用来取远指针farptr的偏移量
unsigned FP_SEG(void far *farptr)本函数用来没置远指针farptr的段值
void far *MK_FP(unsigned seg,unsigned off)根据段seg和偏移量off构造一个far指针
unsigned getpsp()取程序段前缀的段地址,并返回这个地址
char *parsfnm(char *cmdline,struct fcb *fcbptr,int option)
   函数分析一个字符串,通常,对一个文件名来说,是由cmdline所指的一个命令行.
   文件名是放入一个FCB中作为一个驱动器,文件名和扩展名.FCB是由fcbptr所指
   定的.option参数是DOS分析系统调用时,AL文本的值.

int absread(int drive,int nsects,int sectno,void *buffer)本函数功能为读特定的
   磁盘扇区,drive为驱动器号(0=A,1=B等),nsects为要读的扇区数,sectno为开始的逻
   辑扇区号,buffer为保存所读数据的保存空间
int abswrite(int drive,int nsects,int sectno,void *buffer)本函数功能为写特定的
   磁盘扇区,drive为驱动器号(0=A,1=B等),nsects为要写的扇区数,sectno为开始的逻
   辑扇区号,buffer为保存所写数据的所在空间
void   getdfree(int drive,struct dfree *dfreep)本函数用来取磁盘的自由空间,
   drive为磁盘号(0=当前,1=A等).函数将磁盘特性的由dfreep指向的dfree结构中.
   dfree结构如下:
             ┌───────────────────┐
   │struct dfree                                                       │
   │{                                                                         │
   │ unsigned df_avail; /*有用簇个数*/                    │
   │ unsigned df_total; /*总共簇个数*/                   │
   │ unsigned df_bsec;   /*每个扇区字节数*/           │
   │ unsigned df_sclus; /*每个簇扇区数*/             │
   │ }                                                                          │
   └───────────────────┘
char far *getdta()          取磁盘转换地址DTA
void    setdta(char far *dta)设置磁盘转换地址DTA
void   getfat(int drive,fatinfo *fatblkp)
   本函数返回指定驱动器drive(0=当前,1=A,2=B等)的文件分配表信息
   并存入结构fatblkp中,结构如下:
             ┌──────────────────┐
   │struct fatinfo                                                     │
   │{                                                                       │
   │ char fi_sclus; /*每个簇扇区数*/                    │
   │ char fi_fatid; /*文件分配表字节数*/          │
   │ int   fi_nclus; /*簇的数目*/                            │
   │ int   fi_bysec; /*每个扇区字节数*/                 │
   │ }                                                                   │
   └──────────────────┘
void   getfatd(struct fatinfo *fatblkp) 本函数返回当前驱动器的文件分配表信息,
   并存入结构fatblkp中,结构如下:         
             ┌──────────────────┐
   │struct fatinfo                                                 │
   │{                                                                   │
   │ char fi_sclus; /*每个簇扇区数*/                │
   │ char fi_fatid; /*文件分配表字节数*/          │
   │ int   fi_nclus; /*簇的数目*/                         │
   │ int   fi_bysec; /*每个扇区字节数*/             │
   │ }                                                                   │
   └──────────────────┘

int bdos(int dosfun,unsigned dosdx,unsigned dosal)本函数对MSDOS系统进行调用,
   dosdx为寄存器dx的值,dosal为寄存器al的值,dosfun为功能号
int bdosptr(int dosfun,void *argument,unsiigned dosal)本函数对MSDOS系统进行调用,
   argument为寄存器dx的值,dosal为寄存器al的值,dosfun为功能号
int int86(int intr_num,union REGS *inregs,union REGS *outregs)
   执行intr_num号中断,用户定义的寄存器值存于结构inregs中,
   执行完后将返回的寄存器值存于结构outregs中.
int int86x(int intr_num,union REGS *inregs,union REGS *outregs,
         struct SREGS *segregs)执行intr_num号中断,用户定义的寄存器值存于
   结构inregs中和结构segregs中,执行完后将返回的寄存器值存于结构outregs中.
int intdos(union REGS *inregs,union REGS *outregs)
   本函数执行DOS中断0x21来调用一个指定的DOS函数,用户定义的寄存器值
   存于结构inregs中,执行完后函数将返回的寄存器值存于结构outregs中
int intdosx(union REGS *inregs,union REGS *outregs,struct SREGS *segregs)
   本函数执行DOS中断0x21来调用一个指定的DOS函数,用户定义的寄存器值
   存于结构inregs和segregs中,执行完后函数将返回的寄存器值存于结构outregs中
void   intr(int intr_num,struct REGPACK *preg)本函数中一个备用的8086软件中断接口
   它能产生一个由参数intr_num指定的8086软件中断.函数在执行软件中断前,
   从结构preg复制用户定义的各寄存器值到各个寄存器.软件中断完成后,
   函数将当前各个寄存器的值复制到结构preg中.参数如下:
   intr_num 被执行的中断号
   preg为保存用户定义的寄存器值的结构,结构如下
   ┌──────────────────────┐
   │struct REGPACK                                                          │
   │{                                                                                     │
   │ unsigned r_ax,r_bx,r_cx,r_dx;                                         │
   │ unsigned r_bp,r_si,r_di,r_ds,r_es,r_flags;                      │
   │ }                                                                                  │
   └──────────────────────┘
   函数执行完后,将新的寄存器值存于结构preg中
void   keep(int status,int size)以status状态返回MSDOS,但程序仍保留于内存中,所占
   用空间由size决定.
void   ctrlbrk(int (*fptr)()) 设置中断后的对中断的处理程序.
void   disable() 禁止发生中断
void   enable()   允许发生中断
void   geninterrupt(int intr_num)执行由intr_num所指定的软件中断
void   interrupt(* getvect(int intr_num))() 返回中断号为intr_num的中断处理程序,
   例如: old_int_10h=getvect(0x10);
void   setvect(int intr_num,void interrupt(* isr)()) 设置中断号为intr_num的中
   断处理程序为isr,例如: setvect(0x10,new_int_10h);
void   harderr(int (*fptr)()) 定义一个硬件错误处理程序,
   每当出现错误时就调用fptr所指的程序
void   hardresume(int rescode)硬件错误处理函数
void   hardretn(int errcode)   硬件错误处理函数
int inport(int prot) 从指定的输入端口读入一个字,并返回这个字
int inportb(int port)从指定的输入端口读入一个字节,并返回这个字节
void   outport(int port,int word) 将字word写入指定的输出端口port
void   outportb(int port,char byte)将字节byte写入指定的输出端口port
int peek(int segment,unsigned offset) 函数返回segment:offset处的一个字
char   peekb(int segment,unsigned offset)函数返回segment:offset处的一个字节
void   poke(int segment,int offset,char value) 将字value写到segment:offset处
void   pokeb(int segment,int offset,int value) 将字节value写到segment:offset处
int randbrd(struct fcb *fcbptr,int reccnt)
   函数利用打开fcbptr所指的FCB读reccnt个记录.
int randbwr(struct fcb *fcbptr,int reccnt)
   函数将fcbptr所指的FCB中的reccnt个记录写到磁盘上
void   segread(struct SREGS *segtbl)函数把段寄存器的当前值放进结构segtbl中
int getverify()       取检验标志的当前状态(0=检验关闭,1=检验打开)
void   setverify(int value)设置当前检验状态,
   value为0表示关闭检验,为1表示打开检验
int getcbrk()本函数返回控制中断检测的当前设置
int setcbrk(int value)本函数用来设置控制中断检测为接通或断开
   当value=0时,为断开检测.当value=1时,为接开检测

int dosexterr(struct DOSERR *eblkp)取扩展错误.在DOS出现错误后,此函数将扩充的
   错误信息填入eblkp所指的DOSERR结构中.该结构定义如下:
         ┌──────────────┐
   │struct DOSERR                            │
   │{                                                    │
   │ int   exterror;/*扩展错误*/             │
   │ char class; /*错误类型*/          │
   │ char action;   /*方式*/                   │
   │ char locus; /*错误场所*/              │
   │ }                                                     │
   └──────────────┘
int bioscom(int cmd,char type,int port) 本函数负责对数据的通讯工作,
       cmd可以为以下值:
       0 置通讯参数为字节byte值     1 发送字符通过通讯线输出
       2 从通讯线接受字符           3 返回通讯的当前状态
       port为通讯端口,port=0时通讯端口为COM1,port=1时通讯端口为COM2,以此类推
       byte为传送或接收数据时的参数,为以下位的组合:
            ┌───┬─────┬───┬─────┬───┬─────┐
       │byte值 │意义    │byte值│意义    │byte值   │意义     │
       ├───┼─────┼───┼─────┼───┼─────┤
       │0x02     │7数据位 │0x03 │ 8数据位 │0x00   │1停止位 │
       │0x04     │2停止位 │0x00 │无奇偶性   │0x08   │奇数奇偶性│
       │0x18     │偶数奇偶性│0x00 │110波特 │0x20   │150波特 │
       │0x40     │300波特 │0x60 │600波特 │0x80   │1200波特   │
       │0xA0     │2400波特   │0xC0 │4800波特   │0xE0   │9600波特   │
       └───┴─────┴───┴─────┴───┴─────┘
       例如:0xE0|0x08|0x00|0x03即表示置通讯口为9600波特,奇数奇偶性,1停止位,
         8数据位.
       函数返回值为一个16位整数,定义如下:
       第15位 超时
       第14位 传送移位寄存器空
       第13位 传送固定寄存器空
       第12位 中断检测
       第11位 帧错误
       第10位 奇偶错误
       第 9位 过载运行错误
       第 8位 数据就绪
       第 7位 接收线信号检测
       第 6位 环形指示器
       第 5位 数据设置就绪
       第 4位 清除发送
       第 3位 δ接收线信号检测器
       第 2位 下降边环形检测器
       第 1位 δ数据设置就绪
       第 0位 δ清除发送

int biosdisk(int cmd,int drive,int head,int track,
            int sector,int nsects,void *buffer)
   本函数用来对驱动器作一定的操作,cmd为功能号,
   drive为驱动器号(0=A,1=B,0x80=C,0x81=D,0x82=E等).cmd可为以下值:
       0 重置软磁盘系统.这强迫驱动器控制器来执行硬复位.忽略所有其它参数.
       1 返回最后的硬盘操作状态.忽略所有其它参数
       2 读一个或多个磁盘扇区到内存.读开始的扇区由head、track、sector给出。
      扇区号由nsects给出。把每个扇区512个字节的数据读入buffer
       3 从内存读数据写到一个或多个扇区。写开始的扇区由head、track、sector
      给出。扇区号由nsects给出。所写数据在buffer中,每扇区512个字节。
       4 检验一个或多个扇区。开始扇区由head、track、sector给出。扇区号由
      nsects给出。
       5 格式化一个磁道,该磁道由head和track给出。buffer指向写在指定track上
      的扇区磁头器的一个表。
      以下cmd值只允许用于XT或AT微机:
       6 格式化一个磁道,并置坏扇区标志。
       7 格式化指定磁道上的驱动器开头。
       8 返回当前驱动器参数,驱动器信息返回写在buffer中(以四个字节表示)。
       9 初始化一对驱动器特性。
   10 执行一个长的读,每个扇区读512加4个额外字节
   11 执行一个长的写,每个扇区写512加4个额外字节
   12 执行一个磁盘查找
   13 交替磁盘复位
   14 读扇区缓冲区
   15 写扇区缓冲区
   16 检查指定的驱动器是否就绪
   17 复核驱动器
   18 控制器RAM诊断
   19 驱动器诊断
   20 控制器内部诊
   函数返回由下列位组合成的状态字节:
   0x00 操作成功
   0x01 坏的命令
   0x02 地址标记找不到
   0x04 记录找不到
   0x05 重置失败
   0x07 驱动参数活动失败
   0x09 企图DMA经过64K界限
   0x0B 检查坏的磁盘标记
   0x10 坏的ECC在磁盘上读
   0x11 ECC校正的数据错误(注意它不是错误)
   0x20 控制器失效
   0x40 查找失败
   0x80 响应的连接失败
   0xBB 出现无定义错误
   0xFF 读出操作失败
[wangjy17908]
添加时间:2008-06-11
版权所有(C)2005-2015