C语言库函数大全及应用实例二 函数名: bioskey 功 能: 直接使用BIOS服务的键盘接口 用 法: int bioskey(int cmd); 程序例:
#i nclude #i nclude #i nclude
#define RIGHT 0x01 #define LEFT 0x02 #define CTRL 0x04 #define ALT 0x08
int main(void) { int key, modifiers;
/* function 1 returns 0 until a key is pressed */ while (bioskey(1) == 0);
/* function 0 returns the key that is waiting */ key = bioskey(0);
/* use function 2 to determine if shift keys were used */ modifiers = bioskey(2); if (modifiers) { printf("["); if (modifiers & RIGHT) printf("RIGHT"); if (modifiers & LEFT) printf("LEFT"); if (modifiers & CTRL) printf("CTRL"); if (modifiers & ALT) printf("ALT"); printf("]"); } /* print out the character read */ if (isalnum(key & 0xFF)) printf("'%c'\n", key); else printf("%#02x\n", key); return 0; }
函数名: biosmemory 功 能: 返回存储块大小 用 法:int biosmemory(void); 程序例:
#i nclude #i nclude
int main(void) { int memory_size;
memory_size = biosmemory(); /* returns value up to 640K */ printf("RAM size = %dK\n",memory_size); return 0; }
函数名: biosprint 功 能: 直接使用BIOS服务的打印机I/O 用 法: int biosprint(int cmd, int byte, int port); 程序例:
#i nclude #i nclude #i nclude
int main(void) { #define STATUS 2 /* printer status command */ #define PORTNUM 0 /* port number for LPT1 */
int status, abyte=0;
printf("Please turn off your printer. Press any key to continue\n"); getch(); status = biosprint(STATUS, abyte, PORTNUM); if (status & 0x01) printf("Device time out.\n"); if (status & 0x08) printf("I/O error.\n");
if (status & 0x10) printf("Selected.\n"); if (status & 0x20) printf("Out of paper.\n");
if (status & 0x40) printf("Acknowledge.\n"); if (status & 0x80) printf("Not busy.\n");
return 0; }
函数名: biostime 功 能: 读取或设置BIOS时间 用 法: long biostime(int cmd, long newtime); 程序例:
#i nclude #i nclude #i nclude #i nclude
int main(void) { long bios_time;
clrscr(); cprintf("The number of clock ticks since midnight is:\r\n"); cprintf("The number of seconds since midnight is:\r\n"); cprintf("The number of minutes since midnight is:\r\n"); cprintf("The number of hours since midnight is:\r\n"); cprintf("\r\nPress any key to quit:"); while(!kbhit()) { bios_time = biostime(0, 0L);
gotoxy(50, 1); cprintf("%lu", bios_time);
gotoxy(50, 2); cprintf("%.4f", bios_time / CLK_TCK);
gotoxy(50, 3); cprintf("%.4f", bios_time / CLK_TCK / 60);
gotoxy(50, 4); cprintf("%.4f", bios_time / CLK_TCK / 3600); } return 0; }
函数名: brk 功 能: 改变数据段空间分配 用 法: int brk(void *endds); 程序例:
#i nclude #i nclude
int main(void) { char *ptr;
printf("Changing allocation with brk()\n"); ptr = malloc(1); printf("Before brk() call: %lu bytes free\n", coreleft()); brk(ptr+1000); printf(" After brk() call: %lu bytes free\n", coreleft()); return 0; }
函数名: bsearch 功 能: 二分法搜索 用 法: void *bsearch(const void *key, const void *base, size_t *nelem, size_t width, int(*fcmp)(const void *, const *)); 程序例:
#i nclude #i nclude
#define NELEMS(arr) (sizeof(arr) / sizeof(arr[0]))
int numarray[] = {123, 145, 512, 627, 800, 933};
int numeric (const int *p1, const int *p2) { return(*p1 - *p2); }
int lookup(int key) { int *itemptr;
/* The cast of (int(*)(const void *,const void*)) is needed to avoid a type mismatch error at compile time */ itemptr = bsearch (&key, numarray, NELEMS(numarray), sizeof(int), (int(*)(const void *,const void *))numeric); return (itemptr != NULL); }
int main(void) { if (lookup(512)) printf("512 is in the table.\n"); else printf("512 isn't in the table.\n");
return 0; }
函数名: cabs 功 能: 计算复数的绝对值 用 法: double cabs(struct complex z); 程序例:
#i nclude #i nclude
int main(void) { struct complex z; double val;
z.x = 2.0; z.y = 1.0; val = cabs(z);
printf("The absolute value of %.2lfi %.2lfj is %.2lf", z.x, z.y, val); return 0; }
函数名: calloc 功 能: 分配主存储器 用 法: void *calloc(size_t nelem, size_t elsize); 程序例:
#i nclude #i nclude
int main(void) { char *str = NULL;
/* allocate memory for string */ str = calloc(10, sizeof(char));
/* copy "Hello" into string */ strcpy(str, "Hello");
/* display string */ printf("String is %s\n", str);
/* free memory */ free(str);
return 0; }
函数名: ceil 功 能: 向上舍入 用 法: double ceil(double x); 程序例:
#i nclude #i nclude
int main(void) { double number = 123.54; double down, up;
down = floor(number); up = ceil(number);
printf("original number %5.2lf\n", number); printf("number rounded down %5.2lf\n", down); printf("number rounded up %5.2lf\n", up);
return 0; }
函数名: cgets 功 能: 从控制台读字符串 用 法: char *cgets(char *str); 程序例:
#i nclude #i nclude
int main(void) { char buffer[83]; char *p;
/* There's space for 80 characters plus the NULL terminator */ buffer[0] = 81;
printf("Input some chars:"); p = cgets(buffer); printf("\ncgets read %d characters: \"%s\"\n", buffer[1], p); printf("The returned pointer is %p, buffer[0] is at %p\n", p, &buffer);
/* Leave room for 5 characters plus the NULL terminator */ buffer[0] = 6;
printf("Input some chars:"); p = cgets(buffer); printf("\ncgets read %d characters: \"%s\"\n", buffer[1], p); printf("The returned pointer is %p, buffer[0] is at %p\n", p, &buffer); return 0; }
函数名: chdir 功 能: 改变工作目录 用 法: int chdir(const char *path); 程序例:
#i nclude #i nclude #i nclude
char old_dir[MAXDIR]; char new_dir[MAXDIR];
int main(void) { if (getcurdir(0, old_dir)) { perror("getcurdir()"); exit(1); } printf("Current directory is: \\%s\n", old_dir);
if (chdir("\\")) { perror("chdir()"); exit(1); }
if (getcurdir(0, new_dir)) { perror("getcurdir()"); exit(1); } printf("Current directory is now: \\%s\n", new_dir);
printf("\nChanging back to orignal directory: \\%s\n", old_dir); if (chdir(old_dir)) { perror("chdir()"); exit(1); }
return 0; }
函数名: _chmod, chmod 功 能: 改变文件的访问方式 用 法: int chmod(const char *filename, int permiss); 程序例:
#i nclude #i nclude #i nclude
void make_read_only(char *filename);
int main(void) { make_read_only("NOTEXIST.FIL"); make_read_only("MYFILE.FIL"); return 0; }
void make_read_only(char *filename) { int stat;
stat = chmod(filename, S_IREAD); if (stat) printf("Couldn't make %s read-only\n", filename); else printf("Made %s read-only\n", filename); }
函数名: chsize 功 能: 改变文件大小 用 法: int chsize(int handle, long size); 程序例:
#i nclude #i nclude #i nclude
int main(void) { int handle; char buf[11] = "0123456789";
/* create text file containing 10 bytes */ handle = open("DUMMY.FIL", O_CREAT); write(handle, buf, strlen(buf));
/* truncate the file to 5 bytes in size */ chsize(handle, 5);
/* close the file */ close(handle); return 0; }
函数名: circle 功 能: 在给定半径以(x, y)为圆心画圆 用 法: void far circle(int x, int y, int radius); 程序例:
#i nclude #i nclude #i nclude #i nclude
int main(void) { /* request auto detection */ int gdriver = DETECT, gmode, errorcode; int midx, midy; int radius = 100;
/* 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 */ }
midx = getmaxx() / 2; midy = getmaxy() / 2; setcolor(getmaxcolor());
/* draw the circle */ circle(midx, midy, radius);
/* clean up */ getch(); closegraph(); return 0; }
函数名: cleardevice 功 能: 清除图形屏幕 用 法: void far cleardevice(void); 程序例:
#i nclude #i nclude #i nclude #i nclude
int main(void) { /* request auto detection */ int gdriver = DETECT, gmode, errorcode; int midx, midy;
/* 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 */ }
midx = getmaxx() / 2; midy = getmaxy() / 2; setcolor(getmaxcolor());
/* for centering screen messages */ settextjustify(CENTER_TEXT, CENTER_TEXT);
/* output a message to the screen */ outtextxy(midx, midy, "press any key to clear the screen:");
/* wait for a key */ getch();
/* clear the screen */ cleardevice();
/* output another message */ outtextxy(midx, midy, "press any key to quit:");
/* clean up */ getch(); closegraph(); return 0; }
函数名: clearerr 功 能: 复位错误标志 用 法:void clearerr(FILE *stream); 程序例:
#i nclude
int main(void) { FILE *fp; char ch;
/* open a file for writing */ fp = fopen("DUMMY.FIL", "w");
/* force an error condition by attempting to read */ ch = fgetc(fp); printf("%c\n",ch);
if (ferror(fp)) { /* display an error message */ printf("Error reading from DUMMY.FIL\n");
/* reset the error and EOF indicators */ clearerr(fp); }
fclose(fp); return 0; }
函数名: clearviewport 功 能: 清除图形视区 用 法: void far clearviewport(void); 程序例:
#i nclude #i nclude #i nclude #i nclude
#define CLIP_ON 1 /* activates clipping in viewport */
int main(void) { /* request auto detection */ int gdriver = DETECT, gmode, errorcode; int ht;
/* 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 */ }
setcolor(getmaxcolor()); ht = textheight("W");
/* message in default full-screen viewport */ outtextxy(0, 0, "* <-- (0, 0) in default viewport");
/* create a smaller viewport */ setviewport(50, 50, getmaxx()-50, getmaxy()-50, CLIP_ON);
/* display some messages */ outtextxy(0, 0, "* <-- (0, 0) in smaller viewport"); outtextxy(0, 2*ht, "Press any key to clear viewport:");
/* wait for a key */ getch();
/* clear the viewport */ clearviewport();
/* output another message */ outtextxy(0, 0, "Press any key to quit:");
/* clean up */ getch(); closegraph(); return 0; }
|