当我从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
我期待着跑步
./myScript <test.txt
传递“test.txt”打开
这是一个不正确的期望。当您使用shell的重定向运算符<
时,它会打开文件text.txt
并将文件描述符分配给程序的标准输入,即文件描述符0(STDIN_FILENO)。所以没有必要再次打开文件 - 它已经完成了。
如果你希望你的程序接收文件名作为参数,那么不要使用<
并将其作为参数传递:
./myScript test.txt
现在,您将能够在程序的argv[1]
中接收文件名,并在调用open
系统调用时使用它。
注意:C不是脚本而是编译语言,因此您最好使术语正确(例如“C程序”而不是“C脚本”)。