C语言库函数的相关概念
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言库函数的相关概念相关的知识,希望对你有一定的参考价值。
参考技术A 函数名:abort
功 能:异常终止一个进程
函数与形参类型:
void abort(void);
程序例:
#include <stdio.h>
#include <stdlib.h> int main(void)
printf(Calling abort()\\n);
abort();
return 0; /* This is never reached */
函数名:abs
功 能:计算整数num的值。返回整数num的绝对值
函数与参数类型:
int abs(num)
int num;
程序例:
#include <stdio.h>
#include <math.h> int main(void)
int number = -1234; printf(number: %d absolute value: %d\\n, number, abs(number));
return 0;
函数名: absread, abswirte
功 能:绝对磁盘扇区读、写数据
函数与形参类型:
int absread(int drive, int nsects, int sectno, void *buffer);
int abswrite(int drive, int nsects, in tsectno, void *buffer);
程序例:
/* absread example */ #include <stdio.h>
#include <conio.h>
#include <process.h>
#include <dos.h> int main(void)
int i, strt, ch_out, sector;
char buf[512]; printf(Insert a diskette into drive A and press any key\\n);
getch();
sector = 0;
if (absread(0, 1, sector, &buf) != 0)
perror(Disk problem);
exit(1);
printf(Read OK\\n);
strt = 3;
for (i=0; i<80; i++)
ch_out = buf[strt+i];
putchar(ch_out);
printf(\\n);
return(0);
函数名:access
功 能:确定文件的访问权限
函数与形参类型:
int access(const char *filename, int amode);
程序例:
#include <stdio.h>
#include <io.h> int file_exists(char *filename); int main(void)
printf(Does NOTEXIST.FIL exist: %s\\n,
file_exists(NOTEXISTS.FIL) ? YES : NO);
return 0;
int file_exists(char *filename)
return (access(filename, 0) == 0);
函数名: acos
功 能:计算并返回arccos(x)值、要求-1<=X<=1
函数与形参类型:
double acos(x)
double x;
程序例:
#include <stdio.h>
#include <math.h> int main(void)
double result;
double x = 0.5; result = acos(x);
printf(The arc cosine of %lf is %lf\\n, x, result);
return 0;
函数名:allocmem
功 能:分配DOS存储段
函数与形参类型:
int allocmem(unsigned size, unsigned *seg);
程序例:
#include <dos.h>
#include <alloc.h>
#include <stdio.h> int main(void)
unsigned int size, segp;
int stat; size = 64; /* (64 x 16) = 1024 bytes */
stat = allocmem(size, &segp);
if (stat == -1)
printf(Allocated memory at segment: %x\\n, segp);
else
printf(Failed: maximum number of paragraphs available is %u\\n,
stat); return 0;
函数名:arc
功 能:画一弧线
函数与形参类型:
void far arc(int x, int y, int stangle, int endangle, int radius);
程序例:
#include <graphics.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
int main(void)
/* request auto detection */
int gdriver = DETECT, gmode, errorcode;
int midx, midy;
int stangle = 45, endangle = 135;
int radius = 100; /* initialize graphics and local variables */
initgraph(&gdriver, &gmode, ); /* read result of initialization */
errorcode = graphresult(); /* an error occurred */
if (errorcode != grOk)
printf(Graphics error: %s\\n, grapherrormsg(errorcode));
printf(Press any key to halt:);
getch(); exit(1); /* terminate with an error code */
midx = getmaxx() / 2;
midy = getmaxy() / 2;
setcolor(getmaxcolor()); /* draw arc */
arc(midx, midy, stangle, endangle, radius); /* clean up */
getch();
closegraph();
return 0;
函数名: asctime
功 能:转换日期和时间为ASCII码
函数与形参类型:
char *asctime(const struct tm *tblock);
程序例:
#include <stdio.h>
#include <string.h>
#include <time.h> int main(void)
struct tm t;
char str[80]; /* sample loading of tm structure */ t. tm_sec = 1; /* Seconds */
t. tm_min = 30; /* Minutes */
t. tm_hour = 9; /* Hour */
t. tm_mday = 22; /* Day of the Month */
t. tm_mon = 11; /* Month */
t. tm_year = 56; /* Year - does not include century */
t. tm_wday = 4; /* Day of the week */
t. tm_yday = 0; /* Does not show in asctime */
t. tm_isdst = 0; /* Is Daylight SavTime; does not show in asctime */ /* converts structure to null terminated
string */ strcpy(str, asctime(&t));
printf(%s\\n, str); return 0;
函数名::asin
功 能::计算并返回arcsin(x)值、要求-1<=X<=1
函数与形参类型:
double asin(x)
double x;
程序例:
#include <stdio.h>
#include <math.h> int main(void)
double result;
double x = 0.5; result = asin(x);
printf(The arc sin of %lf is %lf\\n, x, result);
return(0);
函数名: assert
功 能:测试一个条件并可能使程序终止
函数与形参类型:
void assert(int test);
程序例:
#include <assert.h>
#include <stdio.h>
#include <stdlib.h> struct ITEM
int key;
int value;
; /* add item to list, make sure list is not null */
void additem(struct ITEM *itemptr)
assert(itemptr != NULL);
/* add item to list */
int main(void)
additem(NULL);
return 0;
函数名:atan
功 能:计算并返回arctan(x)的值
函数与形参类型:
double atan(double x);
程序例:
#include <stdio.h>
#include <math.h> int main(void)
double result;
double x = 0.5; result = atan(x);
printf(The arc tangent of %lf is %lf\\n, x, result);
return(0);
函数名: atan2
功 能:计算并返回arctan(x/y)值
函数与形参类型:
double atan2(double y, double x);
程序例:
#include <stdio.h>
#include <math.h> int main(void)
double result;
double x = 90.0, y = 45.0; result = atan2(y, x);
printf(The arc tangent ratio of %lf is %lf\\n, (y / x), result);
return 0;
函数名: atexit
功 能:注册终止函数
函数与形参类型:
int atexit(atexit_t func);
程序例:
#include <stdio.h>
#include <stdlib.h> void exit_fn1(void)
printf(Exit function #1 called\\n);
void exit_fn2(void)
printf(Exit function #2 called\\n);
int main(void)
/* post exit function #1 */
atexit(exit_fn1);
/* post exit function #2 */
atexit(exit_fn2);
return 0;
函数名: atof
功 能:把str指向的ASCⅡ字符串转换成一个double型整数返回双精度的结果
函数与形参类型:
double atof(str)
char*str;
程序例:
#include <stdlib.h>
#include <stdio.h> int main(void)
float f;
char *str = 12345.67; f = atof(str);
printf(string = %s float = %f\\n, str, f);
return 0;
函数名:atoi
功 能:
把str指向的ASCⅡz字符串转换成一个整数。返回整数结果
函数与参数类型:
double atoi(str )
char *str;
程序例:
#include <stdlib.h>
#include <stdio.h> int main(void)
int n;
char *str = 12345.67; n = atoi(str);
printf(string = %s integer = %d\\n, str, n);
return 0;
函数名:atol
功 能:
把字符串转换成长整型数 。返回长整数结果
函数与参数类型:
long atol(str )
char *str;
程序例:
#include <stdlib.h>
#include <stdio.h> int main(void)
long l;
char *str = 98765432; l = atol(lstr);
printf(string = %s integer = %ld\\n, str, l);
return(0);
函数名:mkdir
功 能:建立一个目录
用 法:
int mkdir(char *pathname);
程序例:
#include <stdio.h>
#include <conio.h>
#include <process.h>
#include <dir.h>
int main(void)
int status;
clrscr();
status = mkdir(asdfjklm);
(!status) ? (printf(Directory created\\n)) :
(printf(Unable to create directory\\n));
getch();
system(dir);
getch();
status = rmdir(asdfjklm);
(!status) ? (printf(Directory deleted\\n)) :
(perror(Unable to delete directory));
return 0;
函数名: mktemp
功 能:建立唯一的文件名
用 法:
char *mktemp(char *template);
程序例:
#include <dir.h>
#include <stdio.h>
int main(void)
/* fname defines the template for the
temporary file. */
char *fname = TXXXXXX, *ptr;
ptr = mktemp(fname);
printf(%s\\n,ptr);
return 0;
函数名: MK_FP
功 能:设置一个远指针
用 法:
void far *MK_FP(unsigned seg, unsigned off);
程序例:
#include <dos.h>
#include <graphics.h>
int main(void)
int gd, gm, i;
unsigned int far *screen;
detectgraph(&gd, &gm);
if (gd == HERCMONO)
screen = MK_FP(0xB000, 0);
else
screen = MK_FP(0xB800, 0);
for (i=0; i<26; i++)
screen[i] = 0x0700 + ('a' + i);
return 0;
函数名: modf
功 能:把数分为整数和尾数
用 法:
double modf(double value, double *iptr);
程序例:
#include <math.h>
#include <stdio.h>
int main(void)
double fraction, integer;
double number = 100000.567;
fraction = modf(number, &integer);
printf(The whole and fractional parts of %lf are %lf and %lf\\n,
number, integer, fraction);
return 0;
函数名: movedata
功 能:拷贝字节
用 法:
void movedata(int segsrc, int offsrc, int segdest,
int offdest, unsigned numbytes);
程序例:
#include <mem.h>
#define MONO_BASE 0xB000
/* saves the contents of the monochrome screen in buffer */
void save_mono_screen(char near *buffer)
movedata(MONO_BASE, 0, _DS, (unsigned)buffer, 80*25*2);
int main(void)
char buf[80*25*2];
save_mono_screen(buf);
函数名: moverel
功 能:将当前位置(CP)移动一相对距离
用 法:
void far moverel(int dx, int dy);
程序例:
#include <graphics.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
int main(void)
/* request auto detection */
int gdriver = DETECT, gmode, errorcode;
char msg[80];
/* initialize graphics and local variables */
initgraph(&gdriver, &gmode, );
/* read result of initialization */
errorcode = graphresult();
if (errorcode != grOk) /* an error occurred */
printf(Graphics error: %s\\n, grapherrormsg(errorcode));
printf(Press any key to halt:);
getch();
exit(1); /* terminate with an error code */
/* move the C.P. to location (20, 30) */
moveto(20, 30);
/* plot a pixel at the C.P. */
putpixel(getx(), gety(), getmaxcolor());
/* create and output a message at (20, 30) */
sprintf(msg, (%d, %d), getx(), gety());
outtextxy(20, 30, msg);
/* move to a point a relative distance */
/* away from the current value of C.P. */
moverel(100, 100);
/* plot a pixel at the C.P. */
putpixel(getx(), gety(), getmaxcolor());
/* create and output a message at C.P. */
sprintf(msg, (%d, %d), getx(), gety());
outtext(msg);
/* clean up */
getch();
closegraph();
return 0;
函数名: movetext
功 能:将屏幕文本从一个矩形区域拷贝到另一个矩形区域
用 法:
int movetext(int left, int top, int right, int bottom,
int newleft, int newtop);
程序例:
#include <conio.h>
#include <string.h>
int main(void)
char *str = This is a test string;
clrscr();
cputs(str);
getch();
movetext(1, 1, strlen(str), 2, 10, 10);
getch();
return 0;
函数名: moveto
功 能:将CP移到(x, y)
用 法:
void far moveto(int x, int y);
程序例:
#include <graphics.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
int main(void)
/* request auto detection */
int gdriver = DETECT, gmode, errorcode;
char msg[80];
/* initialize graphics and local variables */
initgraph(&gdriver, &gmode, );
/* read result of initialization */
errorcode = graphresult();
if (errorcode != grOk) /* an error occurred */
printf(Graphics error: %s\\n, grapherrormsg(errorcode));
printf(Press any key to halt:);
getch();
exit(1); /* terminate with an error code */
/* move the C.P. to location (20, 30) */
moveto(20, 30);
/* plot a pixel at the C.P. */
putpixel(getx(), gety(), getmaxcolor());
/* create and output a message at (20, 30) */
sprintf(msg, (%d, %d), getx(), gety());
outtextxy(20, 30, msg);
/* move to (100, 100) */
moveto(100, 100);
/* plot a pixel at the C.P. */
putpixel(getx(), gety(), getmaxcolor());
/* create and output a message at C.P. */
sprintf(msg, (%d, %d), getx(), gety());
outtext(msg);
/* clean up */
getch();
closegraph();
return 0;
函数名: movemem
功 能:移动一块字节
用 法:
void movemem(void *source, void *destin, unsigned len);
程序例:
#include <mem.h>
#include <alloc.h>
#include <stdio.h>
#include <string.h>
int main(void)
char *source = Borland International;
char *destination;
int length;
length = strlen(source);
destination = malloc(length + 1);
movmem(source,destination,length);
printf(%s\\n,destination);
return 0;
函数名: normvideo
功 能:选择正常亮度字符
用 法:
void normvideo(void);
程序例:
#include <conio.h>
int main(void)
normvideo();
cprintf(NORMAL Intensity Text\\r\\n);
return 0;
函数名: nosound
功 能:关闭PC扬声器
用 法:
void nosound(void);
程序例:
/* Emits a 7-Hz tone for 10 seconds.
True story: 7 Hz is the resonant frequency of a chicken's skull cavity.
This was determined empirically in Australia, where a new factory
generating 7-Hz tones was located too close to a chicken ranch:
When the factory started up, all the chickens died.
Your PC may not be able to emit a 7-Hz tone.
*/
int main(void)
sound(7);
delay(10000);
nosound();
C语言 文件操作相关概念
文件相关概念
文件的概念
一个文件通常就是磁盘上一段命名的存储区。
但是对于操作系统来说,文件就会更复杂一些。例如,一个大文件可以存储在一些分散的区段中,或者还会包含一些操作系统可以确定其文件类型的附加数据,但是这些是操作系统,而不是我们程序员所要关心的事情。我们应该考虑如何在C程序中处理文件。
流的概念
流是一个动态的概念,可以将一个字节形象地比喻成一滴水,字节在设备、文件和程序之间的传输就是流,类似于水在管道中的传输,可以看出,流是对输入输出源的一种抽象,也是对传输信息的一种抽象。
C语言中,I/O操作可以简单地看作是从程序移进或移出字节,这种搬运的过程便称为流(stream)。程序只需要关心是否正确地输出了字节数据,以及是否正确地输入了要读取字节数据,特定I/O设备的细节对程序员是隐藏的。
文本流
文本流,也就是我们常说的以文本模式读取文件。文本流的有些特性在不同的系统中可能不同。
例如:
- 其中之一就是文本行的最大长度。标准规定至少允许254个字符。
- 另一个可能不同的特性是文本行的结束方式。例如在Windows系统中,文本文件约定以一个回车符和一个换行符结尾。但是在Linux下只使用一个换行符结尾。
标准C把文本定义为零个或者多个字符,后面跟一个表示结束的换行符(\\n)。对于那些文本行的外在表现形式与这个定义不同的系统上,库函数负责外部形式和内部形式之间的翻译。例如,在Windows系统中,在输出时,文本的换行符被写成一对回车/换行符。在输入时,文本中的回车符被丢弃。这种不必考虑文本的外部形势而操纵文本的能力简化了可移植程序的创建。
二进制流
二进制流中的字节将完全根据程序编写它们的形式写入到文件中,而且完全根据它们从文件或设备读取的形式读入到程序中。它们并未做任何改变。这种类型的流适用于非文本数据,但是如果你不希望I/O函数修改文本文件的行末字符,也可以把它们用于文本文件。
c语言在处理这两种文件的时候并不区分,都看成是字符流,按字节进行处理。
我们程序中,经常看到的文本方式打开文件和二进制方式打开文件仅仅体现在换行符的处理上。
比如说,在widows下,文件的换行符是\\r\\n
,而在Linux下换行符则是\\n
。
当对文件使用文本方式打开的时候,读写的windows文件中的换行符\\r\\n
会被替换成\\n
读到内存中,当在windows下写入文件的时候,\\n
被替换成\\r\\n
再写入文件。
如果使用二进制方式打开文件,则不进行\\r\\n
和\\n
之间的转换。 那么由于Linux下的换行符就是\\n,所以文本文件方式和二进制方式无区别。
文件的操作
文件流总览
标准库函数是的我们在C程序中执行与文件相关的I/O任务非常方便。下面是关于文件I/O的一般概况。
1.程序为同时处于活动状态的每个文件声明一个指针变量,其类型为
FILE*
。这个指针指向这个FILE结构
,当它处于活动状态时由流使用。
2.流通过fopen函数
打开。为了打开一个流,我们必须指定需要访问的文件或设备以及他们的访问方式(读、写、或者读写)。Fopen和操作系统验证文件或者设备是否存在并初始化FILE。
3.根据需要对文件进行读写操作
。
4.最后调用fclose函数
关闭流。关闭一个流可以防止与它相关的文件被再次访问,保证任何存储于缓冲区中的数据被正确写入到文件中,并且释放FILE结构
。
标准I/O更为简单,因为它们并不需要打开或者关闭。
I/O函数以三种基本的形式处理数据:单个字符、文本行和二进制数据。
对于每种形式都有一组特定的函数对它们进行处理。
各形式数据的输入/输出函数
家族名 | 目的 | 可用于所有流 | 只用于stdin和stdout |
---|---|---|---|
getchar | 字符输入 | fgetc、getc | getchar |
putchar | 字符输出 | fputc、putc | putchar |
gets | 文本行输入 | fgets | gets |
puts | 文本行输出 | fputs | puts |
scanf | 格式化输入 | fscanf | scanf |
printf | 格式化输出 | fprintf | printf |
文件指针
我们知道,文件是由操作系统管理的单元。
当我们想操作一个文件的时候,让操作系统帮我们打开文件,操作系统把我们指定要打开文件的信息保存起来,并且返回给我们一个指针指向文件的信息。文件指针也可以理解为代指打开的文件。这个指针的类型为FILE类型
。该类型定义在stdio.h头文件
中。通过文件指针,我们就可以对文件进行各种操作。
对于每一个ANSI C程序,运行时系统必须提供至少三个流——标准输入(stdin)
、标准输出(stdout)
、标准错误(stderr)
,它们都是一个指向FILE结构
的指针。
标准输入是缺省情况下的输入来源,标准输出时缺省情况下的输出设置。具体缺省值因编译器而异,通常标准输入为键盘设备、标准输出为终端或者屏幕。
下图是三个FILE文件
的指向:
ANSI C并未规定FILE的成员,不同编译器可能有不同的定义。VS下FILE信息如下:
struct _iobuf {
char *_ptr; //文件输入的下一个位置
int _cnt; //剩余多少字符未被读取
char *_base; //指基础位置(应该是文件的其始位置)
int _flag; //文件标志
int _file; //文件的有效性验证
int _charbuf; //检查缓冲区状况,如果无缓冲区则不读取
int _bufsiz; //文件的大小
char *_tmpfname; //临时文件名
};
typedef struct _iobuf FILE;
文件缓冲区
文件缓冲区概念
ANSI C标准采用“缓冲文件系统”处理数据文件
所谓缓冲文件系统是指系统自动地在内存区为程序中每一个正在使用的文件开辟一个文件缓冲区从内存向磁盘输出数据必须先送到内存中的缓冲区,装满缓冲区后才一起送到磁盘去
如果从磁盘向计算机读入数据,则一次从磁盘文件将一批数据输入到内存缓冲区(充满缓冲区),然后再从缓冲区逐个地将数据送到程序数据区(给程序变量) 。
那么文件缓冲区有什么作用呢?
如我们从磁盘里取信息,我们先把读出的数据放在缓冲区,计算机再直接从缓冲区中取数据,等缓冲区的数据取完后再去磁盘中读取,这样就可以减少磁盘的读写次数,再加上计算机对缓冲区的操作大大快于对磁盘的操作,故应用缓冲区可大大提高计算机的运行速度。
文件操作函数
内容较多,请移驾另一篇博客:
https://yangyongli.blog.csdn.net/article/details/121023583
文件操作综合案例
内容较多,请移驾另一篇博客:https://yangyongli.blog.csdn.net/article/details/121025022
以上是关于C语言库函数的相关概念的主要内容,如果未能解决你的问题,请参考以下文章
C 语言动态库封装与设计 ( 动态库调用环境搭建 | 创建应用 | 拷贝动态库相关文件到源码路径 | 导入头文件 | 配置动态库引用 | 调用动态库中的函数 )