Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #define ERROR(arg) \
- { fprintf(stderr, "%s", arg); \
- exit(EXIT_FAILURE); \
- }
- typedef struct data
- {
- int id;
- char *message;
- } data_t;
- enum {
- WRITE_ = 0,
- READ_
- } action;
- int data_manager(FILE *fp, data_t *buffer, size_t size, char *args,
- signed char option, unsigned int id)
- {
- signed char ret;
- buffer->message = malloc((size+1) * sizeof(char));
- if (buffer->message == NULL)
- ERROR("memory can't be allocated");
- buffer->id = 0;
- memset(buffer->message, 0, size);
- if(option == WRITE_) {
- buffer->id = id;
- strcpy(buffer->message, args);
- /* Write a stream on the
- * file specified.
- */
- ret = fwrite((data_t *)buffer, sizeof(data_t), 1, fp);
- } else if (option == READ_)
- /* Read a stream from the
- * file specified.
- */
- ret = fread((data_t *)buffer, sizeof(data_t), 1, fp);
- else
- return -1;
- if (ret < 0)
- return -1;
- return 0;
- }
- int main(int argc, char *argv[])
- {
- FILE *fp;
- signed char ret, c;
- size_t size;
- data_t send, receive;
- if (argc != 3) {
- fprintf(stderr, "usage: %s file message\n", argv[0]);
- exit(EXIT_FAILURE);
- }
- /* Open for reading and writing
- * (overwrite file).
- */
- fp = fopen(argv[1], "w+");
- if (fp == NULL)
- ERROR("Could not open file!\n");
- size = strlen(argv[2]);
- ret = data_manager(fp, &send, size, argv[2], WRITE_, 1);
- if(ret < 0)
- ERROR("'fwrite' does not work");
- ret = fseek(fp, 0, SEEK_SET);
- if(ret < 0)
- ERROR("'fseek' does not work");
- ret = data_manager(fp, &receive, size, NULL, READ_, 0);
- if(ret < 0)
- ERROR("'fread' does not work");
- fprintf(stdout, "File content: %d %d %s\n", READ_, receive.id, receive.message);
- free(receive.message);
- fclose(fp);
- return EXIT_SUCCESS;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement