当前位置: 技术问答>SSL握手通信详解及linux下c/c++ SSL Socket代码举例
iis7站长之家
linux进程间通信(管道)的问题
来源: 互联网 发布时间:2016-07-23
本文导语: linux进程间通信(管道)的问题 #include #include #include #include #include #include int main() { pid_t result; int r_num; int pipe_fd[2]; char buf_r[100]; memset(buf_r,0,sizeof(buf_r)); if(pipe(pipe_fd)0){ printf("第一个命令是“ls -l”,运行结...
linux进程间通信(管道)的问题
#include
#include
#include
#include
#include
#include
int main()
{
pid_t result;
int r_num;
int pipe_fd[2];
char buf_r[100];
memset(buf_r,0,sizeof(buf_r));
if(pipe(pipe_fd)0){
printf("第一个命令是“ls -l”,运行结果如下:n");
printf("%sn",buf);
}
pclose(fp);
}
else{
printf("用popen创新管道错误n");
return 1;
}
fp=popen("grep 7-6","w");
printf("第二个命令是“grep 7-6”,运行结果如下:n");
fwrite(buf,sizeof(char),1500,fp);
pclose(fp);
return 0;
}
关于popen的理解问题:popen() 函数通过创建一个管道,调用 fork 产生一个子进程,执行一个 shell 以运行命令来开启一个进程,但是我不明白popen所产生的子进程是何时执行grep 7-6.在我看来如果popen所产生的子进程在父子程执行fwrite(buf,sizeof(char),1500,fp)前就执行了grep 7-6那么不是根本得不到想要的结果吗?
#include
#include
#include
#include
#include
#include
int main()
{
pid_t result;
int r_num;
int pipe_fd[2];
char buf_r[100];
memset(buf_r,0,sizeof(buf_r));
if(pipe(pipe_fd)0){
printf("第一个命令是“ls -l”,运行结果如下:n");
printf("%sn",buf);
}
pclose(fp);
}
else{
printf("用popen创新管道错误n");
return 1;
}
fp=popen("grep 7-6","w");
printf("第二个命令是“grep 7-6”,运行结果如下:n");
fwrite(buf,sizeof(char),1500,fp);
pclose(fp);
return 0;
}
关于popen的理解问题:popen() 函数通过创建一个管道,调用 fork 产生一个子进程,执行一个 shell 以运行命令来开启一个进程,但是我不明白popen所产生的子进程是何时执行grep 7-6.在我看来如果popen所产生的子进程在父子程执行fwrite(buf,sizeof(char),1500,fp)前就执行了grep 7-6那么不是根本得不到想要的结果吗?
|
第一个问题:
1.首先搞清楚你程序代码的编码方式,拿UTF-8为例,“第一串字符”编码的长度为15,而不是10。
2.因此你write时长度改为10,如代码是UTF-8编码,可以使用strlen(“第一串字符”)。
第二个问题:
1.你对popen的理解是对的。
2.grep命令如果后面没有跟文件名的话,它会从标准输入获取输入。因此运行“grep 7-6”后,它会等待标准输入的输入,在本程序中它会等待fwrite的所写管道的输入。
1.首先搞清楚你程序代码的编码方式,拿UTF-8为例,“第一串字符”编码的长度为15,而不是10。
2.因此你write时长度改为10,如代码是UTF-8编码,可以使用strlen(“第一串字符”)。
第二个问题:
1.你对popen的理解是对的。
2.grep命令如果后面没有跟文件名的话,它会从标准输入获取输入。因此运行“grep 7-6”后,它会等待标准输入的输入,在本程序中它会等待fwrite的所写管道的输入。