这是一项学校作业。
所以基本上我已经编写了一个shell的C代码,用于处理使用&
终止命令,使用>
或<.
使用管道和fork()
进行输入/输出重定向},execvp()
。
问题是我的输入/输出重定向仅处理已存在的文件。
我需要知道的是如何将输出重定向到不存在的文件 - 我知道我必须创建文件,但我不确定它是如何工作的。
例如:ls -a < test.txt
如果test.txt不在目录中,我需要创建它并将输出重定向到该目录。 那么我该如何创建这个文件呢?
这是一些不创建新文件的基本示例代码:
else if( '>' == buff[i] ){
i++;
j=0;
if( ' ' == buff[i] )
i++;
while( ' ' != buff[i] && i < len )
out_file[j++]=buff[i++];
out_file[j]='\0';
if ( ( ofd = open(out_file,1) ) < 0 ){
perror("output redirected file");
exit( 1 );
}
close(1);
dup(ofd);
}
任何有关如何输出和创建新文件的帮助都将非常感谢!谢谢!
答案 0 :(得分:1)
如有必要,您需要告诉open
创建文件:
if ( ( ofd = open(out_file, O_WRONLY | O_CREAT) ) < 0 ) {
请注意,如果对open
的标志使用命名常量,则代码将更具可读性。与功能相当的
if ( ( ofd = open(out_file, 513) ) < 0 ) {
甚至
if ( ( ofd = open(out_file, 0x0201) ) < 0 ) {