Я пытаюсь проверить, что для переменной cmd установлено значение «LISTALL», но это не когда я пытаюсь распечатать ее.Символьный массив C++ не читается прямо через трубу
#include <stdio.h>
#include <unistd.h>
#include <cstring>
#include <stdlib.h>
#include <iostream>
#include <sys/wait.h>
int main(int argc, char **argv)
{
pid_t cPid = fork();
int P2C[2];
int C2P[2];
pipe(P2C);
pipe(C2P);
char cmd[50];
char* listOfProcesses = new char[1024];
if (cPid == 0)
{
...
read(P2C[0], cmd, 50);
printf("%s\n", cmd);
if(strcmp(cmd,"LISTALL") == 0)
{
//printf("Executing the command: %s", cmd);
write(C2P[1], getlistOfProcesses("ps -ax -o pid,cmd"), 1024);
...
}
}
else if (cPid > 0)
{
...
write(P2C[1], "LISTALL", 50);
wait(NULL);
read(C2P[0], listOfProcesses,1024);
...
}
else
{
// fork failed
printf("Forking failed!\n");
exit(1);
}
return 0;
}
То, что я получаю, это символ мини-коробки с 00 сверху и 01 или 02 внизу. Я попробовал вставить символ здесь, но он не отображается.
Если вы читаете (P2C [0], cmd, 1050) ', то' cmd' должно быть достаточно большим для хранения 1050 байт. Объявление 'char cmd [50]' не соответствует этому требованию. – Oswald
Да, они все установлены на 50 в настоящее время, я забыл изменить остальные, когда я разместил, спасибо, хотя – ILikeToLearn
«C++» и «character array» #doesnotcompute –