printf.c

来自「类unix x86平台的简单操作系统」· C语言 代码 · 共 79 行

C
79
字号
#include "types.h"#include "stat.h"#include "user.h"static voidputc(int fd, char c){  write(fd, &c, 1);}static voidprintint(int fd, int xx, int base, int sgn){  char buf[16];  char digits[] = "0123456789ABCDEF";  int i = 0, neg = 0;  uint x;  if(sgn && xx < 0){    neg = 1;    x = 0 - xx;  } else {    x = xx;  }  do {    buf[i++] = digits[x % base];  } while((x /= base) != 0);  if(neg)    buf[i++] = '-';  while(--i >= 0)    putc(fd, buf[i]);}// Print to the given fd. Only understands %d, %x, %p, %s.voidprintf(int fd, char *fmt, ...){  int i, state = 0, c;  uint *ap = (uint*)(void*)&fmt + 1;  for(i = 0; fmt[i]; i++){    c = fmt[i] & 0xff;    if(state == 0){      if(c == '%'){        state = '%';      } else {        putc(fd, c);      }    } else if(state == '%'){      if(c == 'd'){        printint(fd, *ap, 10, 1);        ap++;      } else if(c == 'x' || c == 'p'){        printint(fd, *ap, 16, 0);        ap++;      } else if(c == 's'){        char *s = (char*)*ap;        ap++;        while(*s != 0){          putc(fd, *s);          s++;        }      } else if(c == 'c'){        putc(fd, *ap);        ap++;      } else if(c == '%'){        putc(fd, c);      } else {        // Unknown % sequence.  Print it to draw attention.        putc(fd, '%');        putc(fd, c);      }      state = 0;    }  }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?