filestr.c 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. /*Программа для считывания и записи строкового значения из текстового файла
  2. с последующей записью его в другой текстовый файл.
  3. Для работы с файлами используются функции Linux.*/
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <string.h>
  7. #include <sys/stat.h> //содержатся флаги режимов доступа к файлам (mode)
  8. #include <fcntl.h> //содержатся флаги открытия файлов (flags)
  9. char *readfile(char *path)
  10. {
  11. int fd = open(path, O_RDONLY, S_IRWXG | S_IRWXU | S_IRWXO); // открываем файл на чтение для всех групп
  12. if (fd == -1) // если не открылся выходим
  13. {
  14. printf("Не удалось открыть файл для чтения %s\n", path);
  15. exit(-1);
  16. }
  17. int size = 1000; // размер буфера
  18. char *buf = calloc(size, sizeof(char)); // буфер, память выделяем
  19. int nr = read(fd, buf, size); // читаем в буфер
  20. if (nr == -1) // если не получилось прочитать
  21. {
  22. printf("Не удалось прочитать файл %s\n", path);
  23. exit(-1);
  24. }
  25. close(fd); // закрываем дискриптор
  26. return buf; // возвращаем строку
  27. }
  28. void writefile(char *path, char *answer)
  29. {
  30. int fd = open(path, O_WRONLY, S_IRWXG | S_IRWXU | S_IRWXO); // открываем файл на запись для всех групп
  31. if (fd == -1) // если не открылся выходим
  32. {
  33. printf("Не удалось открыть файл для записи %s\n", path);
  34. exit(-1);
  35. }
  36. int nw = write(fd, answer, strlen(answer)); // пишем
  37. if (nw == -1) // если не получилось записать
  38. {
  39. printf("Не удалось записать в файл %s\n", path);
  40. exit(-1);
  41. }
  42. close(fd); // закрываем дискриптор
  43. }
  44. int main()
  45. {
  46. char* pathToRead = "./read.txt";
  47. char* pathToWrite = "./write.txt";
  48. char* letter = readfile(pathToRead); //читаем
  49. writefile(pathToWrite, letter); //пишем письмо
  50. printf("\nесли вы дошли до сюда, то все гуд\n");
  51. }