预备知识:
1. #include
ssize_t read(int fd, void *buf, size_t count);
read() attempts to read up to count bytes from file descriptor fd into the buffer starting at buf.
2. #include
ssize_t write(int fd, const void *buf, size_t count);
write() writes up to count bytes from the buffer pointed buf to the file referred to by the file descriptor fd.
3.很多应用程序假定标准输入是文件描述符0,标准输出是文件描述符1。本程序则使用在中定义的两个名字:STDIN_FILENO和STDOUT_FILENO.
该程序可用于复制任一Unix普通文件。
程序清单:
#include <stdio.h> //for perror
#include <stdlib.h> //for exit
#include <unistd.h> //for read and write
#define BUFFSIZE 4096
int main(int argc,char *argv[])
{
int n;
char buf[BUFFSIZE];
while((n = read(STDIN_FILENO,buf,BUFFSIZE)) > 0)
{
if(write(STDOUT_FILENO,buf,n) != n)
{
perror("write error");
exit(1);
}
}
if(n < 0)
{
perror("read error");
exit(1);
}
exit(0);
}
|
编译源程序:
gcc -o cpstdintostdout cpstdintostdout.c
执行程序:
./cpstdintostdout >writed.txt
回车后等待用户终端标准输入(Ctrl+D结束,注意:千万不能用Ctrl+C,否则不能重定向到writed.txt)。
如果输出文件writed.txt并不存在,则Shell回创建它。查看writed.txt发现里面就是刚才终端输入的内容。
若以下列的方式执行程序:
./cpstdintostdout < infile > outfile
那么名为infile的文件内容回复制到名为outfile的文件中。
当然,最普通的执行方式是这样:
./copystdintostdout
The only girl i care about has gone away.
The only girl i care about has gone away.
阅读(1534) | 评论(1) | 转发(0) |