如何在c中打开双向管道
如何打开si中的读写管道?popen函数只能在单向模式下打开,我需要在sCom take命令中以php获取程序的输出如何在c中打开双向管道,c,unix,C,Unix,如何打开si中的读写管道?popen函数只能在单向模式下打开,我需要在sCom take命令中以php获取程序的输出 void pcreate(char* com, int* fdin_, int* fdout_) { pid_t pid; int pipe_in[2]; int pipe_out[2]; pipe(pipe_in); pipe(pipe_out); pid = fork()
void pcreate(char* com, int* fdin_, int* fdout_)
{
pid_t pid;
int pipe_in[2];
int pipe_out[2];
pipe(pipe_in);
pipe(pipe_out);
pid = fork();
if (pid > 0)
{
close(pipe_in[0]);
close(pipe_out[1]);
*fdin_ = dup(pipe_in[1]);
*fdout_ = dup(pipe_out[0]);
}
else if (pid == 0 )
{
close(pipe_in[1]);
close(pipe_out[0]);
dup2(pipe_in[0], 0);
dup2(pipe_out[1], 1);
int size = 2;
int comlenght = (int)strlen(com);
for (int i = 0; i < comlenght; i++)
{
if (com[i] == ' ')
size++;
}
char* args[size];
comparse(com, args, size);
if (execvp(args[0], args) < 0)
_exit(0);
}
}
void comparse(char* com, char* args[], int comlenght)
{
long del = 0;
char *com1 = com;
char *com2 = com1;
for (int i = 0; i < comlenght - 1; i++)
{
com2 = strstr(com1, " ");
if (com2 == NULL)
del = (long)strlen(com1);
else
del = com2 - com1;
args[i] = malloc((unsigned)(del+1) * sizeof (char));
args[i][del] = '\0';
strncpy(args[i], com1, (unsigned)del);
com1 = com2 + 1;
}
args[comlenght - 1] = NULL;
}
void pcreate(char*com,int*fdin,int*fdout)
{
pid_t pid;
[2]中的int pipe_;
int pipe_out[2];
管道(管道内);
管道(管道输出);
pid=fork();
如果(pid>0)
{
关闭(管道_in[0]);
关闭(管道[1]);
*fdin_uu=dup(管道[1]);
*fdout=dup(管道输出[0]);
}
否则如果(pid==0)
{
关闭(第[1]条中的管道);
关闭(管道输出[0]);
dup2(管道u在[0]中,0);
dup2(管道输出[1],1);
int size=2;
int comlenght=(int)strlen(com);
对于(int i=0;i
管道确实不适合双向通信;打开两个管道,或使用socketpair()
。管道是单向的。您可以获得两个单独的管道,每个方向一个,或者(更好!)获得一个插座。您可以在C中使用socketpair()来获得一对连接的套接字。