【发布时间】:2016-05-29 14:12:06
【问题描述】:
我的任务是编写一个 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 中运行该代码并从标准输入传递文本? 请给我从 shell 中的标准输入向文件传递数据的例子
【问题讨论】:
-
代码存在会导致意外行为的问题。它是完整的来源吗?
-
是的,但我是从书上拿来的,可能会故意出错
-
打开一个文件写入
O_CREAT包含并不总是有效,如果你没有权限,例如它会失败,open()会返回-1然后你可以检查@987654326 @ 验证原因。代码不这样做。另外,你到底在期待什么。该问题没有解释预期的行为。 -
见How to Ask。如果您从一本书中复制,您自己对代码的贡献在哪里?您的具体问题是什么?此外,这似乎是一本糟糕的书,因为它使用了已弃用的
main签名。并且mv不会在同一个文件系统中复制文件。 -
这就是问题所在。我们很乐意提供帮助,但如何运行代码的答案在您发布的代码中非常清楚。如果您要问这个问题,那么它会告诉所有人您不了解代码的作用,因此它极不可能是您的工作产品。请花点时间查看每一行代码在做什么。阅读每个调用的手册页。然后,如果您仍然卡住。询问您遇到的具体问题,该问题比“我如何运行此代码”要窄得多。