Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* Create an unnamed message queue for replies to I/O requests */
- mqueue_t *io_reply_queue = mqueue_create(NULL);
- /* Open the file */
- file_t *notes = file_open("~/Documents/notes.txt", FILE_READ);
- /* Issue multiple asynchronous read requests, with request identifiers */
- char buffer1[512], buffer2[512];
- file_read_async(notes, buffer1, 0, 512, io_reply_queue, 0);
- file_read_async(notes, buffer2, 512, 512, io_reply_queue, 1);
- /* Number of writes completed */
- int num_writes_done = 0;
- /* Wait for responses */
- while(1)
- {
- /* Block for replies */
- message_t *msg = mqueue_recv(io_reply_queue);
- /* Which type of operation completed? */
- switch(msg->method)
- {
- case FILE_READ_FINISH:
- /* Read failed */
- if (msg->reply < 0)
- {
- printf("Read failed\n");
- return 1;
- }
- /* First read request */
- switch(msg->id)
- {
- case 0:
- buffer1[0] = 'A';
- file_write_async(notes, buffer1, 0, 512, io_reply_queue, 0);
- break;
- case 1:
- buffer2[0] = 'B';
- file_write_async(notes, buffer2, 512, 512, io_reply_queue, 1);
- break;
- default:
- printf("Invalid read reply\n");
- return 1;
- }
- break;
- case FILE_WRITE_FINISH:
- /* Write failed */
- if (msg->reply < 0)
- {
- printf("Write failed\n");
- return 1;
- }
- /* One more write finished */
- num_writes_done++;
- if (num_writes_done == 2)
- {
- printf("Done\n");
- return 0;
- }
- break;
- default:
- printf("Invalid message\n");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement