Я должен сохранить то, что выводит команда date
(Unix), в виде строки в переменную, а затем записать это в канал в дочернем процессе. В конце выведите это в родительский процесс, используя канал. Это то, что я пробовал до сих пор:
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/wait.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{
int channel[2];
if(pipe(channel) == -1) { printf("Eroare la crearea pipe ului!\n"); return 1; }
pid_t pid = fork();
if(pid < 0) { printf("Eroare la crearea procesului\n"); }
else if(pid > 0)
{
wait(NULL); // wait for the child to write to the pipe
close(channel[1]); // close not-needed side of pipe
char *aux;
read(channel[0], aux, sizeof(channel[0]));
printf("Sirul citit este: '%s'\n", aux);
close(channel[0]);
// exit(0);
}
else
{
close(channel[0]);
// char *data_acum = (char*)system("date");
char *data_acum = system("date");
printf("variabila `data_acum` are valoarea '%s'\n", data_acum);
// printf(typeof(data_acum));
write( channel[1], data_acum, sizeof(data_acum) );
// write( channel[1], system("date"), sizeof(system("date")) );
// exit(0);
}
return 0;
}
вывод :
Thu Apr 30 02:05:39 EEST 2020
variabila `data_acum` are valoarea '(null)'
Sirul citit este: '1I^HHPTLz'
Более конкретно, моя проблема:
Я пытаясь выяснить, почему эта строка char *data_acum = system("date")
или комментарий //char *data_acum = (char*)system("date")
не работают; "работая", я ожидаю сохранить строку, которая будет отображаться date
, если я буду использовать ее непосредственно в командной строке. Разве это system("date")
не возвращает строку, которую я могу сохранить в переменной type const char*
?
Кроме того, я не уверен на 100%, что хочет сказать предупреждение: warning:initialization makes pointer from integer without a cast [-Wint-conversion]
. Я понимаю, что между типами есть некоторая несовместимость, но действительно ли system("date")
возвращает int
? И, таким образом, я неправильно пытаюсь каким-то образом преобразовать его в const char*
? Я помню, что видел, что даты на самом деле представляют собой шестнадцатеричные числа.
Извините за, может быть, слишком много вопросов! В итоге, чтобы подвести итог моих вопросов: что возвращает system("date")
и как я могу решить мою проблему?
ожидаемый результат :
Thu Apr 30 02:05:39 EEST 2020
variabila `data_acum` are valoarea 'Thu Apr 30 02:05:39 EEST 2020'
Sirul citit este: 'Thu Apr 30 02:05:39 EEST 2020'
Примечания:
1) Я должен использовать date
2) Я специально не проверял статус возврата ребенка
3) Я знаю, что не рекомендуется использовать wait(NULL)
.