Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdbool.h>
- #include <stdlib.h>
- #include <unistd.h>
- #include <string.h>
- #include <fcntl.h>
- #include <errno.h>
- #include <linux/limits.h>
- #include <sys/stat.h>
- #include <sys/types.h>
- int main(int argc, char *argv[])
- {
- struct stat st, oldmods;
- int fd_intrare, fd_iesire;
- char cmd;
- if (argc < 5)
- {
- printf("nr insuficient de argumente");
- exit(1);
- }
- if (-1 == (fd_intrarea = open(argv[1], O_RDONLY)))
- {
- perror("Eroare la deschiderea fisierului de intrare");
- exit(2);
- }
- stat(argv[2], &oldmods);
- if (0 == access(argv[2], F_OK))
- {
- if (-1 == access(argv[2], W_OK))
- {
- printf("Vrei sa-i dai drept de scriere? y n");
- scanf(" %c", &cmd);
- if (cmd == 'n' || cmd == 'N'){
- exit(3);
- }
- else if (cmd == 'y' || cmd == 'Y')
- {
- chmod(argv[2], oldmods.st_mode | S_IRUSR | S_IWUSR);
- }
- else
- {
- printf("Daca nu pot scrie fisierul nu mai am ce face");
- exit(3);
- }
- }
- printf("Vrei sa il suprascrii? Y sau N?");
- scanf(" %c", &cmd);
- if (cmd == 'y' || cmd == 'Y')
- {
- fd_iesire = open(argv[2], O_WRONLY | O_TRUNC);
- }
- else
- {
- fd_iesire = open(argv[2], O_WRONLY | O_APPEND);
- }
- }
- else
- if (-1 == (fd_iesire = creat(argv[2], oldmods.st_mode | S_IWUSR | S_IRUSR)))
- {
- perror("Eroare la apelul creat");
- exit(3);
- }
- int codRead;
- char bufferIn[PATH_MAX], bufferOut[PATH_MAX];
- char *pBufferIn, *pBufferOut;
- while (0 != (codRead = read(fd_intrare, bufferIn, PATH_MAX)))
- {
- if (-1 == codRead)
- {
- perror("Eroare la apelul read");
- exit(4);
- }
- pBufferIn = bufferIn;
- pBufferOut = bufferOut;
- for (size_t i = 0; i < codRead; i++, pBufferIn++)
- {
- if (*pBufferIn == argv[3][0])
- {
- *pBufferOut = argv[4][0];
- }
- else
- {
- *pBufferOut = *pBufferIn;
- }
- pBufferOut++;
- }
- *pBufferOut = '\0';
- if (-1 == write(fd_iesire, bufferOut, strlen(bufferOut)))
- {
- perror("Eroare la apelul write");
- exit(5);
- }
- }
- if (close(fd_intrare) == -1)
- exit(6);
- if (close(fd_iesire) == -1)
- exit (7);
- printf("Done!");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement