Как принять путь от стандартного ввода для системного вызова open ()? - PullRequest
0 голосов
/ 17 февраля 2019

Мне нужно принять путь, когда я запускаю свой скрипт C на linux из stdin.

Я пытался сделать: -

 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

1 Ответ

0 голосов
/ 17 февраля 2019

Я ожидаю, что при запуске

. / MyScript

для передачи "test.txt" откроется

Это неверное ожидание,Когда вы используете оператор перенаправления оболочки <, он открывает файл text.txt и назначает дескриптор файла для стандартного ввода вашей программы, то есть дескриптор файла 0 (STDIN_FILENO).Поэтому нет необходимости снова открывать файл - это уже сделано.

Если вы хотите, чтобы ваша программа получала имя файла в качестве аргумента, не используйте < и передайте его в качестве аргумента:

./myScript test.txt

Теперь вы сможете получить имя файла в argv[1] вашей программы и использовать его при вызове системного вызова open.


Примечание: Cэто не сценарий, а скомпилированный язык, поэтому вам лучше получить правильную терминологию (например, «программа C» вместо «сценарий C»).

...