2015-06-14 6 views
0

Я пытаюсь проверить, что для переменной 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 внизу. Я попробовал вставить символ здесь, но он не отображается.

+0

Если вы читаете (P2C [0], cmd, 1050) ', то' cmd' должно быть достаточно большим для хранения 1050 байт. Объявление 'char cmd [50]' не соответствует этому требованию. – Oswald

+0

Да, они все установлены на 50 в настоящее время, я забыл изменить остальные, когда я разместил, спасибо, хотя – ILikeToLearn

+0

«C++» и «character array» #doesnotcompute –

ответ

3

Вы создаете 4 трубы: два в родительском процессе и два в дочернем процессе.

Создайте трубы перед разветвлением! Затем fork, затем проверьте, находитесь ли вы в родительском процессе или в дочернем процессе.

Таким образом, у вас есть только две трубы, оба процесса знают об этих трубах и могут общаться, читая или записывая в соответствующие файловые дескрипторы труб.

+0

Спасибо, это похоже на LISTALL, но теперь это похоже, фактически не вводит оператор if, не считает ли он их одинаковыми из-за различия типов или чего-то еще? – ILikeToLearn

+0

Операция 'if' не связана и должна рассматриваться в другом вопросе. – Oswald

+0

Хорошо, сделаем то, еще раз спасибо за помощь! – ILikeToLearn

Смежные вопросы