我的任務是寫一個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'來驗證原因。代碼不這樣做。另外,你究竟在期待什麼。這個問題並沒有解釋預期的行爲。 –