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

问题描述 投票:-1回答:1

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

我试过这样做: -

 int file = open(STDIN_FILENO, O_RDONLY)

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

我期待着跑步

./myScript < test.txt 

传递“test.txt”打开

 open("test.txt", O_RDONLY); // expected after running the previous command
c linux linux-kernel system-calls
1个回答
0
投票

我期待着跑步

./myScript <test.txt

传递“test.txt”打开

这是一个不正确的期望。当您使用shell的重定向运算符<时,它会打开文件text.txt并将文件描述符分配给程序的标准输入,即文件描述符0(STDIN_FILENO)。所以没有必要再次打开文件 - 它已经完成了。

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

./myScript test.txt

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


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

© www.soinside.com 2019 - 2024. All rights reserved.