C 语言中的 重定向
1.freopen
语法如下:
FILE </em>freopen(const char <em>filename, const char </em>mode, FILE <em>stream)
这个函数用来重定向输出的,如下例子:
int main(int argc, char </em>argv[]) { FILE <em>stream; printf("One\n"); stream = freopen("out.txt", "a+", stdout); printf("Two\n"); return 0; }
运行之后打印 One, 将 Two 追加到 out.txt 文件中,具体可见:C library function - freopen()
2.管道符
>
: 重定向标准输出>>
: 重定向输出,与>
不同的是它追加内容,而>
会清空内容后在写入<
: 重定向标准输入>&
: 将一个句柄的输出写入到另一个句柄的输入中。<&
: 从一个句柄读取输入并将其写入到另一个句柄输出中|
: 管道,连接一个进程的标准输出与另一个进程的标准输入(一个程序的输出转向另一个程序的输入)
下面简单的程序:
int main(int argc, char </em>argv[]) { char name[20]; while (scanf("%19s", name) == 1) { printf("name:%s\n", name); } return 0; }
有一个含有名字的文件 names.txt,内容如下:
Hello world C/C++ Python Java JS Objective-C
那么我们用 <
重定向输入:将 names.txt 文件作为输入源:
./main < names.txt name:Hello name:world name:C/C++ name:Python name:Java name:JS name:Objective-C
这里为什么 world 另起一行呢,原因就是在 scanf 语句的格式串中由于没有非格式字符,因此在输入时要用一个以上的空格或回车键作为每两个输入数之间的间隔。
用 >
重定向输出到 out.txt 文件中:
./main < names.txt > out.txt ./main < names.txt >> out.txt // 追加
把 stdout 和 stderr 信息打印在一块:
./main < names.txt > out.txt 1>&2
3.fprintf() sends formatted output to a stream.
发送格式输出到数据流, 语法如下:
int fprintf(FILE <em>stream, const char </em>format, ...)
- stream:FILE object 指针,标识该数据流的文件对象
- format:格式化字符串:
%[flags][width][.precision][length]specifier
fprintf(stderr, "err"); // 标准错误输出 fprintf(stdout, "good"); // 标准输出
一个简单的例子:
#include <stdio.h> #include <stdlib.h> // 读取文件 void readFile() { FILE <em> fp; char c; fp = fopen("file.txt", "r"); while (1) { c = fgetc(fp); // 读取一行 if (feof(fp)) { // EOF: 文件结尾 break; } printf("%c", c); } fclose(fp); } // 写入文件 void writeFile() { FILE </em> fp; // 声明一个 FILE 类型的指针 fp = fopen("file.txt", "w+"); // 以追加的方式打开文件 // 格式化输出到文件流中 fprintf(fp, "%s %s %s %d\n", "We", "are", "in", 2015); fprintf(stdout, "ok\n"); // 一个进程最多有 256 个数据流,数据流有限,用完之后要关闭 fclose(fp); } int main(int argc, char <em>argv[]) { writeFile(); readFile(); return 0; }
到目前为止,用了 printf
, fprintf
, sprintf
, 它三者区别如下:
printf
outputs to the standard output stream (stdout
)fprintf
goes to a file handle ( FILE )- sprintf goes to a buffer you allocated. ( char )
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
上一篇: 常量修饰符 const
下一篇: 彻底找到 Tomcat 启动速度慢的元凶
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论