Rev 2251 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 2251 | Rev 2389 | ||
---|---|---|---|
Line 6... | Line 6... | ||
6 | #include <stdio.h> |
6 | #include <stdio.h> |
7 | #include <stdlib.h> |
7 | #include <stdlib.h> |
8 | #include <string.h> |
8 | #include <string.h> |
9 | #include <unistd.h> |
9 | #include <unistd.h> |
10 | #include <async.h> |
10 | #include <async.h> |
- | 11 | #include <align.h> |
|
- | 12 | #include <as.h> |
|
- | 13 | #include <ipc/ipc.h> |
|
11 | #include <ipc/services.h> |
14 | #include <ipc/services.h> |
- | 15 | #include <sys/mman.h> |
|
12 | #include "../fs/fs.h" |
16 | #include "../fs/fs.h" |
- | 17 | #include "../share/shared_proto.h" |
|
- | 18 | #include "../console/console.h" |
|
13 | 19 | ||
- | 20 | #define CON_FS_ATTEMPTS 1000 |
|
- | 21 | ||
- | 22 | static int fs_phone; |
|
14 | 23 | ||
15 | int main(int argc, char *argv[]) |
24 | int main(int argc, char *argv[]) |
16 | { |
25 | { |
17 | //Why does my console have no number? |
- | |
18 | printf("This is your cat! \n"); |
- | |
19 | 26 | ||
20 | char * fname = "version"; |
27 | char fname[30]; |
21 | char * buff = "012345678901234567890123456789012"; |
- | |
22 | unsigned int file_handle; |
28 | unsigned int file_handle; |
- | 29 | int retval, flags, entry; |
|
- | 30 | unsigned short entries_num, inode_num; |
|
- | 31 | size_t size; |
|
- | 32 | void *share = NULL; |
|
- | 33 | ||
- | 34 | ||
- | 35 | printf("Cat task\n"); |
|
- | 36 | ||
- | 37 | printf("Connecting to the SERVICE_FS..."); |
|
- | 38 | if (!connect_to_fs(&fs_phone, CON_FS_ATTEMPTS)) { |
|
- | 39 | printf("Connection to SERVICE_FS was refused\n"); |
|
- | 40 | return -1; |
|
- | 41 | } |
|
- | 42 | printf("OK\n"); |
|
- | 43 | ||
- | 44 | printf("Creating address space area..."); |
|
- | 45 | size = ALIGN_UP(BLOCK_SIZE * sizeof(char), PAGE_SIZE); |
|
- | 46 | share = mmap(share, size, AS_AREA_READ | AS_AREA_WRITE, MAP_SHARED | MAP_ANONYMOUS, 0, 0); |
|
- | 47 | if ((int)share < 0){ |
|
- | 48 | printf("As_area_create error: %d\n", (int)share); |
|
- | 49 | return -1; |
|
- | 50 | } |
|
- | 51 | printf("OK\n"); |
|
23 | 52 | ||
- | 53 | printf("Connecting the task to FS..."); |
|
- | 54 | retval = async_req_2(fs_phone, FS_NEW_CONSUMER, task_get_id(), 0, NULL, NULL); |
|
- | 55 | if (retval < 0) { |
|
- | 56 | printf("FS_NEW_CONSUMER error: %d\n", retval); |
|
- | 57 | return -1; |
|
- | 58 | } |
|
24 | int fs_phone; |
59 | printf("OK\n"); |
25 | 60 | ||
26 | fs_phone = ipc_connect_me_to(PHONE_NS, SERVICE_FS, 0); |
61 | printf("Sending memory to FS_SERVICE..."); |
27 | while (fs_phone < 0) { |
62 | flags = 0; |
- | 63 | flags = AS_AREA_READ | AS_AREA_WRITE; |
|
- | 64 | retval = async_req_3(fs_phone, IPC_M_AS_AREA_SEND, (uintptr_t)share, size, flags, NULL, NULL, NULL); |
|
28 | usleep(10000); |
65 | if (retval < 0) { |
29 | fs_phone = ipc_connect_me_to(PHONE_NS, SERVICE_FS, 0); |
66 | printf("%d\n", retval); |
- | 67 | return -1; |
|
30 | } |
68 | } |
- | 69 | printf("OK\n"); |
|
- | 70 | ||
- | 71 | /* Allocating structure for extended message. */ |
|
- | 72 | message_params_t *params; |
|
- | 73 | params = malloc(sizeof(message_params_t)); |
|
- | 74 | memset((void*)params, 0, sizeof(message_params_t)); |
|
- | 75 | ||
- | 76 | /* We want lookup our work directory. */ |
|
- | 77 | printf("Request for get number of entries..."); |
|
- | 78 | retval = send_request(fs_phone, FS_DSUM, params, share); |
|
- | 79 | if (retval < 0) { |
|
- | 80 | printf("%d\n", retval); |
|
- | 81 | return -1; |
|
- | 82 | } |
|
- | 83 | printf("OK\n"); |
|
- | 84 | printf("Total number of entries: %d\n", retval); |
|
- | 85 | ||
- | 86 | entries_num = retval; |
|
- | 87 | ||
- | 88 | ||
- | 89 | /* File list in working directory. */ |
|
- | 90 | printf("File list:\n"); |
|
- | 91 | ||
- | 92 | for (entry = 0; entry < entries_num; entry++) { |
|
- | 93 | ||
- | 94 | params->entry_number = entry; |
|
- | 95 | retval = send_request(fs_phone, FS_READENTRY, params, share); |
|
- | 96 | if (retval < 0) { |
|
- | 97 | printf("%d\n", retval); |
|
- | 98 | return -1; |
|
- | 99 | } |
|
- | 100 | /* |
|
- | 101 | if (retval < sizeof(unsigned short)) |
|
- | 102 | continue; |
|
- | 103 | */ |
|
- | 104 | memcpy(&inode_num, share, sizeof(unsigned short)); |
|
- | 105 | memcpy(fname, (void *)(share+sizeof(unsigned short)), retval-sizeof(unsigned short)); |
|
- | 106 | ||
- | 107 | /* Do not show empty entries. */ |
|
- | 108 | if (!inode_num) |
|
- | 109 | continue; |
|
- | 110 | ||
- | 111 | printf("Inode number: %u\t\t", inode_num); |
|
- | 112 | printf("File name: %s\n", fname); |
|
- | 113 | ||
- | 114 | } |
|
- | 115 | printf("OK\n"); |
|
- | 116 | ||
- | 117 | /* We want to change working directory */ |
|
- | 118 | memcpy(fname, "uspace/fs", 10); |
|
- | 119 | memcpy(params->fname, fname, 10); |
|
- | 120 | ||
- | 121 | printf("Request for changing actual directory to %s...", fname); |
|
- | 122 | retval = send_request(fs_phone, FS_CHDIR, params, share); |
|
- | 123 | if (retval < 0) { |
|
- | 124 | printf("%d\n", retval); |
|
- | 125 | return -1; |
|
- | 126 | } |
|
- | 127 | printf("OK\n"); |
|
31 | 128 | ||
- | 129 | /* We want to work with specified file. */ |
|
- | 130 | memcpy(fname, "fs.c", 10); |
|
- | 131 | memcpy(params->fname, fname, 10); |
|
- | 132 | ||
- | 133 | printf("Request for opening file %s...", fname); |
|
32 | file_handle = async_req_2(fs_phone, FS_OPEN, (unsigned int) fname, 0, NULL, NULL); |
134 | retval = send_request(fs_phone, FS_OPEN, params, share); |
- | 135 | if (retval < 0) { |
|
- | 136 | printf("%d\n", retval); |
|
- | 137 | return -1; |
|
- | 138 | } |
|
- | 139 | printf("OK\n"); |
|
33 | 140 | ||
- | 141 | file_handle = retval; |
|
34 | printf("I got file handle %d \n",file_handle); |
142 | printf("Returned file handle...%d\n", file_handle); |
- | 143 | ||
- | 144 | memcpy(params->fname, fname, 10); |
|
- | 145 | params->fd = file_handle; |
|
- | 146 | ||
- | 147 | printf("Request for getting info about file %s[FSTAT called]...", fname); |
|
- | 148 | retval = send_request(fs_phone, FS_FSTAT, params, share); |
|
- | 149 | if (retval < 0) { |
|
- | 150 | printf("%d\n", retval); |
|
- | 151 | return -1; |
|
- | 152 | } |
|
- | 153 | printf("OK\n"); |
|
- | 154 | ||
- | 155 | params->fd = file_handle; |
|
- | 156 | params->offset = 100; |
|
- | 157 | params->whence = 1; /* from actual position in the file */ |
|
- | 158 | ||
- | 159 | printf("Request for seeking after %d bytes inside file %s...", params->offset, fname); |
|
- | 160 | retval = send_request(fs_phone, FS_SEEK, params, share); |
|
- | 161 | if (retval < 0) { |
|
- | 162 | printf("%d\n", retval); |
|
- | 163 | return -1; |
|
- | 164 | } |
|
- | 165 | printf("OK\n"); |
|
35 | 166 | ||
- | 167 | printf("New file position is: %d\n", retval); |
|
- | 168 | ||
- | 169 | params->nbytes = 100; |
|
- | 170 | ||
- | 171 | printf("Request for reading %d bytes from file %s...", params->nbytes, fname); |
|
36 | char * retval = (char * ) async_req_3(fs_phone, FS_READ, file_handle, (unsigned int) buff, 32, NULL, NULL, NULL); |
172 | retval = send_request(fs_phone, FS_READ, params, share); |
- | 173 | if (retval < 0) { |
|
- | 174 | printf("%d\n", retval); |
|
- | 175 | return -1; |
|
- | 176 | } |
|
- | 177 | printf("OK\n"); |
|
- | 178 | ||
- | 179 | printf("%d bytes was read into buffer\n", retval); |
|
- | 180 | printf("\nContent of the buffer:\n"); |
|
- | 181 | printf(share); |
|
- | 182 | printf("\n\n"); |
|
- | 183 | ||
- | 184 | ||
- | 185 | params->offset = 0; |
|
- | 186 | params->whence = 0; /* from beginning of the file */ |
|
- | 187 | ||
- | 188 | printf("Request for seeking after %d bytes inside file %s...", params->offset, fname); |
|
- | 189 | retval = send_request(fs_phone, FS_SEEK, params, share); |
|
- | 190 | if (retval < 0) { |
|
- | 191 | printf("%d\n", retval); |
|
- | 192 | return -1; |
|
- | 193 | } |
|
- | 194 | printf("OK\n"); |
|
- | 195 | ||
- | 196 | printf("New file position is: %d\n", retval); |
|
- | 197 | params->fd = file_handle; |
|
- | 198 | ||
- | 199 | params->nbytes = 50; |
|
- | 200 | ||
- | 201 | printf("Another request for reading %d bytes from file %s...", params->nbytes, fname); |
|
- | 202 | retval = send_request(fs_phone, FS_READ, params, share); |
|
- | 203 | if (retval < 0) { |
|
- | 204 | printf("%d\n", retval); |
|
- | 205 | return -1; |
|
- | 206 | } |
|
- | 207 | printf("OK\n"); |
|
37 | 208 | ||
- | 209 | printf("%d bytes was read into buffer\n", retval); |
|
- | 210 | printf("\nContent of the buffer:\n"); |
|
- | 211 | printf(share); |
|
- | 212 | printf("\n\n"); |
|
- | 213 | ||
- | 214 | ||
- | 215 | printf("Request for closing file %s...", fname); |
|
- | 216 | retval = send_request(fs_phone, FS_CLOSE, params, share); |
|
- | 217 | if (retval < 0) { |
|
38 | printf("Data read: %d\n", retval); |
218 | printf("%d\n", retval); |
- | 219 | return -1; |
|
- | 220 | } |
|
- | 221 | printf("OK\n"); |
|
- | 222 | ||
- | 223 | printf("Request for closing file %s once more...", fname); |
|
- | 224 | retval = send_request(fs_phone, FS_CLOSE, params, share); |
|
- | 225 | if (retval < 0) { |
|
- | 226 | printf("%d\n", retval); |
|
- | 227 | return -1; |
|
- | 228 | } |
|
- | 229 | printf("OK\n"); |
|
39 | 230 | ||
40 | return 0; |
231 | return 0; |
41 | } |
232 | } |
42 | 233 |