如何从stdin接受open()系统调用的路径名?

时间:2019-02-17 00:31:49

标签: c linux linux-kernel system-calls

当我从stdin在Linux上运行C脚本时,我需要接受路径名。

我尝试做:-

 int file = open(STDIN_FILENO, O_RDONLY)

“文件”始终分配为-1(未打开文件)。

我希望运行

./myScript < test.txt 

通过“ test.txt”打开

 open("test.txt", O_RDONLY); // expected after running the previous command

1 个答案:

答案 0 :(得分:0)

  

我希望跑步

     

./ myScript      

通过“ test.txt”打开

那是不正确的期望。当您使用外壳程序的重定向运算符<时,它将打开文件text.txt并将文件描述符分配给程序的标准输入,即文件描述符0(STDIN_FILENO)。因此,无需再次打开文件-已经完成。

如果您希望程序将文件名作为参数接收,则不要使用<并将其作为参数传递:

./myScript test.txt

现在,您将能够在程序的argv[1]中接收文件名,并将其用于对open系统调用的调用中。


注意:C不是脚本,而是编译后的语言,因此最好使术语正确(例如,用“ C程序”代替“ C脚本”)。