一.管道
1.两个进程间通信(管道)
<span style="font-size:24px;">#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void main123() {
char str[1024];
gets(str);
puts(str);
system("pause");
}
int exeshell(char *cmd,char *result) {//传递指令,返回结果
FILE *pf = _popen(cmd,"r");//打开一个管道,用这个管道执行cmd
if (pf == NULL) {
printf("文件打开失败\n");
return 0;
}
else {
while (!feof(pf)) {//到了文件末尾返回1,没有返回0
char str[256] = { 0 };
if (fgets(str, 256, pf)) {//fgets返回读到多少个字符
strcat(result,str);//拼接字符串
}
}
_pclose(pf);//关闭管道
}
return 1;
}
void main() {
char result[1024 * 8] = { 0 };
if (exeshell("tasklist",result)!=0) {
printf("%s", result);
}
char *p = strstr(result, "QQ.exe");
if (p != NULL) {
printf("QQ执行中\n");
}
else {
printf("QQ未执行\n");
}
system("pause");
}</span>
二.printf可变参数
<span style="font-size:24px;">#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
void myprintf(char *pstar, ...) {//...可变参数
va_list ap;//起始点
va_start(ap, pstar);//从ap开始读取pstar
char flag;
while (*pstar) {
flag = *pstar;//取出字符
//pstar++;
if (*pstar != '%') {
putchar(flag);
pstar++;
}
else {
pstar++;//往前 &d &c &s &&
flag = *pstar;
switch (flag) {
case 'd':
{
int data = va_arg(ap, int);//读取下一个参数按照int
printf("%d", data);//整数转化字符串,挨个显示字符
break;
}
case 's':
{
char *str = va_arg(ap, char*);//读取下一个参数按照int
printf("%s", str);//整数转化字符串,挨个显示字符
break;
}
case 'c':
{
char ch = va_arg(ap, char);//读取下一个参数按照int
putchar(ch);//整数转化字符串,挨个显示字符
break;
}
case 'f':
{
double db= va_arg(ap, double);//读取下一个参数按照int
printf("%f", db);//整数转化字符串,挨个显示字符
break;
}
case '%':
{
putchar('%');
break;
}
default:
break;
}
pstar++;
}
}
va_end(ap);//读取结束
}
void main() {
myprintf("\n1234abc");
myprintf("\n1234abc%d",10);
myprintf("\n1234abc%d%s",10,"wuzhigang");
myprintf("\n1234abc%d%s%c", 10, "wuzhigang", 'A');
system("pause");
}</span>