在linux或者windows下你会经常用到echo这个命令,这个命令将输入拷贝到输出,即你输入什么,它就输出什么,下面,我们用编程的方式也来简单的模仿一下它的实现:
首先要看一下几个相关的函数:
#include <unistd.h>
ssize_t read(int fd, void *buf, size_t count);
ssize_t write(int fd, const void *buf, size_t count);
read 函数从文件描述符 fd 中读取count 大小的内容到buf中
write 函数向文件描述符 fd 中写入count 大小的内容, 要写的内容放在buf中
#include <stdio.h>
int getc(FILE *stream);
int putc(int c, FILE* stream);
getc 从stream中读取一个字符
putc 将一个字符写入stream中
我们都知道,现代的操作系统都有三个标准的输入输出,它们的是标准输入、 标准输出和标准错误, 文件描述符分别是stdin, stdout
和 stderr, 或者用0, 1, 2表示, 在linux中有三个宏定义:STDIN_FILENO, STDOUT_FILENO 和
STDERR_FILENO。
下面我们通过2个实例来看看具体应用:
下载:
- #include <stdio.h>
- #include <unistd.h>
-
- #define BUF_SIZ 4096
-
- int main(void)
- {
- int n;
- char buf[BUF_SIZ];
-
- while ( (n = read(STDIN_FILENO, buf, BUF_SIZ)) > 0 )
- {
- if ( write(STDOUT_FILENO, buf, n) != n )
- {
- printf("write error.\n");
- exit(-1);
- }
- }
- if ( n < 0)
- {
- printf("read error\n");
- exit(-2);
- }
-
- exit(0);
- }
该程序利用系统调用直接从STDIN_FILENO中读最多BUF_SIZ大小的数据到缓冲区buf中,然后用write将其写入到STDOUT_FILENO中。
下面的一个例子和上面的效果差不多,但没有缓冲区大小限制,它是利用标准的IO函数来操作的。
下载:
- #include <stdio.h>
-
- int main()
- {
- int c;
-
- while ( (c = getc(stdin)) != EOF )
- {
- if ( putc(c, stdout) == EOF )
- {
- printf("error putc\n");
- exit(-1);
- }
- }
-
- if (ferror(stdin))
- {
- printf("input error\n");
- exit(-2);
- }
- exit(0);
- }
阅读(781) | 评论(0) | 转发(0) |