C++ 不访问 if 语句中的方法
C++ not accessing method in ifstatement
当我在此处添加 \n 时,if 语句块现在会执行:
printf("Executing the command: %s\n", cmd);
在此添加之前,它没有命中 getListofProcesses() 方法。原代码如下所示:
#include <stdio.h>
#include <unistd.h>
#include <cstring>
#include <stdlib.h>
#include <iostream>
#include <sys/wait.h>
char* getlistOfProcesses(const char* cmd)
{
FILE* pipe = popen(cmd, "r");
if (!pipe) return (char*)"ERROR";
char buffer[128];
char *result = new char[1024];
while(!feof(pipe)) {
if(fgets(buffer, 128, pipe) != NULL)
strcat(result, buffer);
}
pclose(pipe);
return result;
}
int main(int argc, char **argv)
{
int P2C[2];
int C2P[2];
pipe(P2C);
pipe(C2P);
pid_t cPid = fork();
char cmd[50];
char* listOfProcesses = new char[1024];
if (cPid == 0)
{
close(P2C[1]);
close(C2P[0]);
read(P2C[0], cmd, 50);
if(strcmp(cmd,"LISTALL") == 0)
{
printf("Executing the command: %s", cmd);
write(C2P[1], getlistOfProcesses("ps -ax -o pid,cmd"), 1024);
close(P2C[0]);
close(C2P[1]);
}
}
else if (cPid > 0)
{
close(C2P[1]);
close(P2C[0]);
write(P2C[1], "LISTALL", 50);
wait(NULL);
read(C2P[0], listOfProcesses,1024);
printf("%s\n",listOfProcesses);
close(C2P[0]);
close(P2C[1]);
}
...
return 0;
}
我不确定这是否是由于我的管道完成方式所致,或者是否正在访问它但我没有注意到,我尝试使用方法顶部附近的 printf 进行检查。
您需要在格式字符串中包含换行符,或在 printf 语句后调用 fflush(stdout)
。有关详细信息,请参阅 Why does printf not flush after the call unless a newline is in the format string?。
当我在此处添加 \n 时,if 语句块现在会执行:
printf("Executing the command: %s\n", cmd);
在此添加之前,它没有命中 getListofProcesses() 方法。原代码如下所示:
#include <stdio.h>
#include <unistd.h>
#include <cstring>
#include <stdlib.h>
#include <iostream>
#include <sys/wait.h>
char* getlistOfProcesses(const char* cmd)
{
FILE* pipe = popen(cmd, "r");
if (!pipe) return (char*)"ERROR";
char buffer[128];
char *result = new char[1024];
while(!feof(pipe)) {
if(fgets(buffer, 128, pipe) != NULL)
strcat(result, buffer);
}
pclose(pipe);
return result;
}
int main(int argc, char **argv)
{
int P2C[2];
int C2P[2];
pipe(P2C);
pipe(C2P);
pid_t cPid = fork();
char cmd[50];
char* listOfProcesses = new char[1024];
if (cPid == 0)
{
close(P2C[1]);
close(C2P[0]);
read(P2C[0], cmd, 50);
if(strcmp(cmd,"LISTALL") == 0)
{
printf("Executing the command: %s", cmd);
write(C2P[1], getlistOfProcesses("ps -ax -o pid,cmd"), 1024);
close(P2C[0]);
close(C2P[1]);
}
}
else if (cPid > 0)
{
close(C2P[1]);
close(P2C[0]);
write(P2C[1], "LISTALL", 50);
wait(NULL);
read(C2P[0], listOfProcesses,1024);
printf("%s\n",listOfProcesses);
close(C2P[0]);
close(P2C[1]);
}
...
return 0;
}
我不确定这是否是由于我的管道完成方式所致,或者是否正在访问它但我没有注意到,我尝试使用方法顶部附近的 printf 进行检查。
您需要在格式字符串中包含换行符,或在 printf 语句后调用 fflush(stdout)
。有关详细信息,请参阅 Why does printf not flush after the call unless a newline is in the format string?。