Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <ctype.h>
- #include <stdio.h>
- #include <unistd.h>
- #include <sys/mman.h>
- #include <sys/stat.h>
- #include <sys/types.h>
- #include <errno.h>
- #include <fcntl.h>
- #include <string.h>
- #include <stdlib.h>
- //map2=replace(map, reversed, torev);
- char* replace(const char *str, const char *oldstr, const char *newstr)
- {
- int lengthstr= strlen(oldstr); //strlen(oldstr)=strlen(newstr)
- char *result;
- result = (char *)malloc(strlen(str)+1);
- char *space;
- space = (char *)malloc(lengthstr+3);
- space[0]=' ';
- strncpy(&space[1], oldstr, lengthstr-1);
- space[strlen(space)]=' ';
- space[strlen(space)-1]=' ';
- space[strlen(space)-2]=' ';
- char *newline;
- newline = (char *)malloc(lengthstr+3);
- newline[0]='\n';
- newline[strlen(newline)-1]=' ';
- strncpy(&newline[1], oldstr, lengthstr);
- char *first;
- first = (char *)malloc(lengthstr+2);
- strncpy(&first[0], oldstr, lengthstr);
- first[strlen(first)-1]=' ';
- int i = 0;
- while (*str)
- {
- if (i==0 && strstr(str, first) == str)
- {
- result[i+lengthstr]=' ';
- strcpy(&result[i], newstr);
- i += lengthstr;
- str += lengthstr;
- }
- else if (strstr(str, space) == str)
- {
- result[i]=' ';
- result[i+lengthstr]=' ';
- strcpy(&result[i]+1, newstr);
- i += lengthstr+1;
- str += lengthstr+1;
- }
- else if (strstr(str, newline) == str)
- {
- result[i]='\n';
- result[i+lengthstr]=' ';
- strcpy(&result[i]+1, newstr);
- i += lengthstr+1;
- str += lengthstr+1;
- }
- else
- result[i++] = *str++;
- }
- return result;
- }
- int main(int argc, char *argv[])
- {
- char *torev, *file;
- int fd;
- struct stat inode;
- void *map, *map2;
- switch(argc)
- {
- case 3:
- file = argv[1];
- torev=argv[2];
- break;
- default :
- printf("You should write:\t%s file word\n", argv[0]);
- return 1;
- }
- char reversed[strlen(torev)+1];
- strcpy(reversed, torev);
- if ((fd = open(argv[1], O_RDWR)) == -1)
- {
- perror("Error opening file for writing");
- return 2;
- }
- if (fstat(fd, &inode))
- {
- perror("Error fstat");
- return 3;
- }
- if ((map = mmap(NULL, inode.st_size, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0))==(void *)-1)
- {
- perror("Error mmapping the file");
- return 4;
- }
- int i;
- int x= strlen(torev)/2;
- for (i = 0; i<x; i++)
- {
- //torev[i] = toupper(torev[i]);
- char tmp= torev[i];
- torev[i]=torev[strlen(torev)-1-i];
- torev[strlen(torev)-1-i]=tmp;
- }
- map2=replace(map, reversed, torev);
- memcpy(map, map2, inode.st_size);
- msync(map, inode.st_size, MS_SYNC);
- munmap(map, inode.st_size);
- close(fd);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement