我的任务是写一个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的文字? 请给我exapmle在外壳
该代码具有会导致意外行为的问题。它是完整的源代码吗? –
是的,但我把它从书中拿出来,可能有意的错误 – Stranger
打开一个文件来编写'O_CREAT'包括并不总是工作,如果你没有权限,例如它会失败,'open()'会返回'-1',然后你可以检查'errno'来验证原因。代码不这样做。另外,你究竟在期待什么。这个问题并没有解释预期的行为。 –