ПроцессыДляЛинукс.txt 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. #include <unistd.h>
  2. #include <sys/stat.h>
  3. #include <fcntl.h>
  4. #include <string.h>
  5. #include <sys/types.h>
  6. #include <math.h>
  7. #ifndef BUF_SIZE
  8. #define BUF_SIZE 1024
  9. #endif
  10. int main()
  11. {
  12. double a, b, c, discriminant, x1, x2;
  13. char buffer[BUF_SIZE];
  14. char result[BUF_SIZE];
  15. int fd_in, fd_out;
  16. ssize_t num_read;
  17. // Открытие файла с коэффициентами для чтения
  18. fd_in = open("coefficients.txt", O_RDWR);
  19. if (fd_in == -1) {
  20. printf("Ошибка открытия файла coefficients.txt");
  21. return 1;
  22. }
  23. printf("Файл для чтения успешно открыт\n");
  24. // Чтение данных из файла
  25. num_read = read(fd_in, buffer, BUF_SIZE);
  26. if (num_read == -1) {
  27. printf("Ошибка чтения из файла");
  28. close(fd_in);
  29. return 1;
  30. }
  31. buffer[num_read] = '\0'; // Завершение строки нулевым символом
  32. printf("Прочитано в родителе\n");
  33. close(fd_in);
  34. printf("%s\n", buffer);
  35. // execve("ProcessChild",buffer,NULL);
  36. // printf("Если вы читаете эту надпись, то нам не удалось создать дочерний процесс");
  37. // return 0;
  38. char* childargv[] = {"первый", "второй", "третий",NULL}; //аргументы командной строки дочернего процесса
  39. char* childenv[] = {"первый=один", "второй=два", "третий=три",NULL}; //окружение дочернего процесса
  40. execve("ProcessChild",childargv,childenv);
  41. //далее код не будет выполняться, если вызов execve завершился удачно
  42. printf("Если вы читаете эту надпись, то нам не удалось создать дочерний процесс");
  43. return 0;
  44. }
  45. #include <unistd.h>
  46. #include <sys/stat.h>
  47. #include <fcntl.h>
  48. #include <string.h>
  49. #include <sys/types.h>
  50. #include <math.h>
  51. #ifndef BUF_SIZE
  52. #define BUF_SIZE 1024
  53. #endif
  54. extern char **environ;
  55. int main(int argc,char* argv[])
  56. {
  57. // double a, b, c, discriminant, x1, x2;
  58. // char result[BUF_SIZE];
  59. // printf("Я дочерний процесс с id = %d\n",getpid());
  60. // printf("%str",buffer);
  61. // if (sscanf(buffer, "%lf %lf %lf", &a, &b, &c) != 3) {
  62. // printf("Некорректный формат входных данных\n");
  63. // return 1;
  64. // }
  65. // printf("Коэффициенты: a=%.2f, b=%.2f, c=%.2f\n", a, b, c);
  66. // if (a == 0 && b == 0) {
  67. // printf("Невозможно решить уравнение, оба коэффициента a и b равны 0\n");
  68. // strcpy(result, "Невозможно решить уравнение, оба коэффициента a и b равны 0\n");
  69. // return 0;
  70. // }
  71. // for (size_t i = 0; i < argc; i++)//печатаем аргументы командной строки
  72. // {
  73. // printf("argv[%d] = %s\n",i,argv[i]);
  74. // }
  75. for (char** env = environ; *env!=NULL; env++)//печатаем переменные окружения
  76. {
  77. printf("переменная: %s\n",*env);
  78. }
  79. return 0;
  80. }