Чтение параметров командной строки после' <' в C

Можно только сказать, содержит ли текущий поток нормальную блокировку ( Thread.holdsLock(Object) ). Вы не можете получить ссылку на поток, который имеет блокировку без собственного кода.

Однако при выполнении чего-либо сложного с поточной обработкой Вы, вероятно, хотите ознакомить себя с java.util.concurrent пакетами. ReentrantLock действительно позволяет Вам получать его владельца (но это - защищенный метод, таким образом, необходимо было бы расширить это). В зависимости от Вашего приложения может случиться так, что при помощи пакетов параллелизма, Вы найдете, что не должны получать владельца блокировки, в конце концов.

существуют непрограммируемые методы для нахождения владельцев блокировки, таких как передача сигналов, чтобы о JVM выпустила дамп потока к stderr, которые полезны для определения причины мертвых блокировок.

6
задан 29 September 2009 в 17:11
поделиться

10 ответов

< is a shell redirect - it is handled outside your program. What you'll see is the contents of the file name 'input' being send to your standard input stream. This is a common way for programs to operate, although they usually also handle being given a file name e.g. sed.

If I had to guess I would think the:

input: No such file or directory.

is coming from the shell, as it is unable to open the file specified: "input".

On the other hand, if you actually want the < input as arguments to your program, you can escape or quote them so the shell won't interpret them. (Escaping left as an exercise for the reader :-)).

21
ответ дан 8 December 2019 в 02:19
поделиться

On *nix systems, there won't be a third element of argv. If you execute that command on almost any Unix-like shell, it will be similar to doing this:

cat input | ./program

So your ./program has only one element in argv, but it's stdin is the file input, so to read the file you would just read from stdin. Note that this is a perfectly valid way to design your program. Many Unix programs read from standard input if no files are given, so that you may pipe in input from other programs (or in this case, from files).

5
ответ дан 8 December 2019 в 02:19
поделиться

Синтаксис ./ program - это специальный синтаксис оболочки, говорящий: «Перенаправляет все в файле с именем input в стандартную запись программы. ".

Чтобы прочитать ввод, ваша программа просто должна использовать стандартные функции чтения ввода, строку fgets или scanf .

10
ответ дан 8 December 2019 в 02:19
поделиться

То, что идет после <, не является аргументом командной строки. Содержимое файла будет передано в вашу программу оболочкой.

Все, что вам нужно сделать, это прочитать из стандартного ввода, и вы получите содержимое файла.

3
ответ дан 8 December 2019 в 02:19
поделиться

This is a Unix shell thing. The form someprogram < somefile tells someprogram to run using somefile as its input. If you want to do something different involving the < symbol, you'll need to quote it.

0
ответ дан 8 December 2019 в 02:19
поделиться

Не ставьте знак «<». Вы хотите, чтобы аргументы командной строки делали это:

$ ./program -Dflag seven = ixnay FromDinger

В своем приложении попробуйте следующее:

int main( int argc, char **argv )
{
   int i;
   for( i = 0 ; i < argc ; ++i )
      printf( "Arg %d = %s\n", i, argv[i] );
   return 0;
}

Вы заметите, что первый аргумент - это имя исполняемого файла (в index 0), а вторым аргументом (с индексом 1) будет «-Dflag»

0
ответ дан 8 December 2019 в 02:19
поделиться

The < means that the program will read it's standard input (stdin) from the named file (input). So just read from stdin (using fgets, fread, etc).

0
ответ дан 8 December 2019 в 02:19
поделиться

Вам нужно экранировать символ '<', иначе оболочка проанализирует его и программа не получит его в командной строке.

Если вы используете bash, то:

./program '<' input

или

./program \< input

Другие оболочки могут делать это иначе (например, по умолчанию Windows, cmd.exe , использует ^ как escape-символ, а не \ ).

3
ответ дан 8 December 2019 в 02:19
поделиться

Фактически, это очень распространенная техника, используемая в турнирах по программированию. Данные, необходимые вашей программе, хранятся в файле, скажем, data.txt, а затем перенаправляются в ваше приложение с помощью символа «<» в оболочке, например: ./ program < []

0
ответ дан 8 December 2019 в 02:19
поделиться

Вы можете получить его, прочитав стандартный ввод.

-2
ответ дан 8 December 2019 в 02:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: