stdin и входът от конзолата и клавиатурата еднакви ли са

stdin, конзолата и клавиатурата еднакви ли са в C?


person Mishthi    schedule 27.12.2010    source източник


Отговори (3)


От isatty(3) man страница:

Функцията isatty() тества дали fd е дескриптор на отворен файл, отнасящ се до терминал.

   #include <unistd.h>

   int isatty(int fd);

isatty() връща 1, ако fd е дескриптор на отворен файл, препращащ към терминал; в противен случай се връща 0 и errno е настроено да указва грешката.

Така че isatty(stdin) ще върне различна от нула, ако е въведена, и нула, ако е пренасочена.

person amphetamachine    schedule 27.12.2010
comment
Това означава, че stdin и конзолата не са едно и също. - person mouviciel; 27.12.2010
comment
isatty() се доближава, въпреки че терминалът не се управлява непременно от клавиатура или въвеждане от потребителя, но ситуациите, в които се управлява програмно, са такива, при които се очаква програмата да се държи така, сякаш получава въвеждане от клавиатурата. - person Chris Stratton; 27.12.2010

Да, това е правилно. По същество можете да имате системно извикване read() за приемане на вход от stdin.

person atx    schedule 27.12.2010

Не е задължително. stdin може да бъде пренасочен от файл (напр. executable < input) или друго неинтерактивно устройство.

Отговорът на amphetamachine ви дава инструмента, за да направите разликата.

person John Bode    schedule 27.12.2010