XINU
xsh_rdstest.c
Go to the documentation of this file.
1 /* xsh_rdstest.c - xsh_rdstest */
2 #include <xinu.h>
3 #include <stdio.h>
4 
5 /*------------------------------------------------------------------------
6  * xsh_rdstest - shell to print the time the system has been up
7  *------------------------------------------------------------------------
8  */
9 shellcmd xsh_rdstest(int nargs, char *args[])
10 {
11  bool8 err;
12  int32 retval;
13  int32 i, j;
14  char dskname[] = "TestDisk";
15 
16  char buff[2048];
17  char buff2[2048];
18 
19  retval = open(RDISK,dskname,"rw");
20 
21  if (retval < 0) {
22  kprintf("xsh_rdstest: open %s returns %s, stopping\r\n",
23  dskname, retval==SYSERR?"SYSERR":"TIMEOUT");
24  close( RDISK );
25  return 1;
26  } else {
27  kprintf("xsh_rdstest: open %s returns %d\r\n",
28  dskname, retval);
29  }
30 
31  kprintf("writing eight blocks to the disk\r\n");
32  for (i=7; i>=0; i--) {
33  memset(buff, (char)(i&0xff), RD_BLKSIZ);
34  kprintf("\n\r*** writing block %d\n\r",i);
35  retval = write(RDISK, buff, i);
36  if (retval < 0) {
37  kprintf("write to block %d returns %d\r\n", i, retval);
38  }
39  }
40  kprintf("reading block 1\n\r");
41  retval = read(RDISK, buff, 1);
42  kprintf("read from block 1 has return value %d\r\n", retval);
43 
44  err = 0;
45  for (i=0; i<RD_BLKSIZ; i++) {
46  if (buff[i] != (char) (0xff&1)) {
47  err = 1;
48  break;
49  }
50  }
51  if (err == 0) {
52  kprintf("Block 1 came back intact!!!\r\n");
53  } else {
54  kprintf("Sadly :-( byte %d is not correct!!!\r\n", i);
55  }
56 
57  kprintf("reading block 6\n\r");
58  retval = read(RDISK, buff, 6);
59  err = 0;
60  for (i=0; i<RD_BLKSIZ; i++) {
61  if (buff[i] != (char) (0xff&6)) {
62  err = 1;
63  break;
64  }
65  }
66  if (err == 0) {
67  kprintf("Block 6 came back intact!!!\r\n");
68  } else {
69  kprintf("Sadly :-( byte %d is not correct!!!\r\n", i);
70  }
71 
72  j = 0;
73  for (i=0; i<RD_BLKSIZ; i++) {
74  buff2[i] = "abcdefghijklmnopqrstuvwxyz"[j++];
75  j %= 13;
76  }
77 
78  kprintf("rewriting block 5\n\r");
79  retval = write(RDISK, buff2, 5);
80  kprintf("write to block 5 has return value %d\r\n", retval);
81 
82  kprintf("reading block 5\n\r");
83  retval = read(RDISK, buff2, 5);
84 
85  err = 0;
86  for (i=0; i<RD_BLKSIZ; i++) {
87  if (buff2[i] != buff[i]) {
88  err = 1;
89  break;
90  }
91  }
92 
93  if (err == 0) {
94  kprintf("Block 5 came back intact!!!\r\n");
95  } else {
96  kprintf("Sadly :-( byte %d is not correct!!!\r\n", i);
97  }
98 
99  memset(buff, NULLCH, RD_BLKSIZ);
100 
101  kprintf("reading block 6 again\n\r");
102  retval = read(RDISK, buff, 6);
103  kprintf("read from block 6 has return value %d\r\n", retval);
104 
105  err = 0;
106  for (i=0; i<RD_BLKSIZ; i++) {
107  if ( buff[i] != (char)(0xff&6) ) {
108  err = 1;
109  break;
110  }
111  }
112  if (err == 0) {
113  kprintf("Got back identical results!!!\r\n");
114  } else {
115  kprintf("Sadly :-( byte %d differs!!!\r\n", i);
116  }
117  return 0;
118 }
syscall kprintf(char *fmt,...)
ポーリングI/Oを使用して、フォーマットされた文字列をコンソールに出力する。
Definition: kprintf.c:98
#define RD_BLKSIZ
Definition: rdisksys.h:9
全てのシステムヘッダファイルをインクルードする。
#define SYSERR
処理が失敗した場合
Definition: kernel.h:79
syscall close(did32)
Definition: close.c:9
syscall read(did32, char *, uint32)
Definition: read.c:9
byte bool8
Boolean値
Definition: kernel.h:36
syscall write(did32, char *, uint32)
Definition: write.c:9
shellcmd xsh_rdstest(int nargs, char *args[])
Definition: xsh_rdstest.c:9
int int32
符号あり32ビット整数(int)
Definition: kernel.h:11
void * memset(void *, const int, int32)
指定のByteブロックに対して、同じ値をNバイト分書き込む。
Definition: memset.c:13
#define RDISK
Definition: conf.h:36
int32 shellcmd
シェルコール関数 返り値の型
Definition: kernel.h:51
syscall open(did32, char *, char *)
Definition: open.c:9
#define NULLCH
NULL文字(NULL終端)
Definition: kernel.h:70