如何从shell中的stdin传递数据到文件

时间:2016-05-29 14:12:07

标签: c shell stdin

我的任务是编写一个C程序来说明使用系统调用的mv命令:

#include<stdio.h>
#include<errno.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/types.h>
#include<fcntl.h>
#define BUF_SIZE 8192
int main(){
int input_fd,output_fd;
ssize_t ret_in, ret_out; //number of bytes returned by read(), write()
char buffer[BUF_SIZE];
output_fd=open("sss", O_WRONLY | O_CREAT);
if(output_fd==-1){
        perror("open");
        return 3;
}
while((ret_in=read(stdin, buffer, BUF_SIZE))>0){
        ret_out=write (output_fd, buffer,(ssize_t) ret_in);
        if(ret_out!=ret_in){
                perror("write");
                return 4;
        }
}
close(output_fd);
input_fd=open("sss", O_RDONLY);
while((ret_in=read(input_fd,buffer, BUF_SIZE))>0)
        ret_out=write(stdout, buffer,(ssize_t) ret_in);
close(input_fd);
return 0;
}

如何在shell中运行该代码并从stdin传递文本? 请给我一个将数据从shell中的stdin传递给文件的例子

1 个答案:

答案 0 :(得分:1)

首先修复您的代码并将stdout更改为1(或STDOUT_FILENO)并将stdin更改为0(或STDIN_FILENO)。其他人是FILE *,属于fread和fwrite。任何体面的编译器都应该警告你......

./MoveCommand < filename是单向的。

这会将filename的内容重定向到stdin,然后将其写入文件“sss”,然后读取此文件并将内容回显到stdout。< / p>

所以你基本上在做cat filename,并且需要额外复制一些固定文件。

./Movecommand本身也是可能的。但是你必须自己键入输入(此时为stdin),并且当你想要发信号通知你输入Ctrl + D(Linux或Mac)或Ctrl + Z(Windows)时。然后它会回显您输入的所有内容,内容也在“sss”中。

当然,您也可以在管道中使用它,因此ls -l | ./Movecommand例如{}试试吧。