Portál AbcLinuxu, 22. května 2024 19:36


Dotaz: Cecko -- prime cteni z terminalu

28.8.2004 13:19 Dave
Cecko -- prime cteni z terminalu
Přečteno: 161×
Odpovědět | Admin
Dobry den,

tento dotaz sem mozna uplne nepatri, ale toto forum cte dost lidi, kteri by mi mozna mohli pomoci:

Mam program v cecku, ktery dostava na standardni vstup data, ktera zpracovava, pouziti vypada nejak takhle:

cat soubor.dat | program

Problem spociva v tom, ze behem provadeni programu potrebuji interaktivne nacist heslo z klavesnice. Ale na standardni vstup programu se jiz posilaji zpracovavana data, takze pres stdin to nejde. Jak to tedy provest?
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

28.8.2004 13:32 Zdeněk Burda | skóre: 61 | blog: Zdendův blog | Praha
Rozbalit Rozbalit vše Re: Cecko -- prime cteni z terminalu
Odpovědět | | Sbalit | Link | Blokovat | Admin
cteni z /dev/tty?
-- Nezdar není hanbou, hanbou je strach z pokusu.
28.8.2004 13:46 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše Re: Cecko -- prime cteni z terminalu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Jak to provedeš? No čteš přece přímo z terminálu ;-)
#define _GNU_SOURCE
#include <stdlib.h>
#include <stdio.h>
    /* tento komentář je věnován Leošovi za všechna <p> navíc */
int
main(void)
{
    FILE *terminal;
    char *buffer = NULL;
    size_t size = 0;
 
    terminal = fopen(ctermid(NULL), "r");
    if (!terminal) {
        fprintf(stderr, "Cannot open controlling terminal.\n");
        return EXIT_FAILURE;
    }
 
    getline(&buffer, &size, terminal);
    fputs("===== Read from terminal:\n", stderr);
    fputs(buffer, stderr);
 
    fputs("===== Read from stdin:\n", stderr);
    while (getline(&buffer, &size, stdin) != -1)
        fputs(buffer, stderr);
 
    free(buffer);
 
    return EXIT_SUCCESS;
}
28.8.2004 20:05 Dave
Rozbalit Rozbalit vše Re: Cecko -- prime cteni z terminalu
Super, presne tohle jsem potreboval. Diky moc. Jenom jeste jeden dotaz: Poradi si s timhle Cygwin, kdyz budu chtit portovat program do Windows?
28.8.2004 22:26 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše Re: Cecko -- prime cteni z terminalu
To sě mě ptáš moc ;-)

Cygwin funkci ctermid() poskytuje, ale jestli to bude doopravdy fungovat ... snad ano, vyzkoušej.
28.8.2004 22:28 Martin Čížek | skóre: 20 | Praha
Rozbalit Rozbalit vše Re: Cecko -- prime cteni z terminalu
Hmm, funkci ctermid() jsem neznal.

Koukám, že její GNU i FreeBSD verze vrací vždy "/dev/tty" jako odpověď (což samozřejmě není špatně -- viz poznámka z man stránky "The path returned may not uniquely identify the controlling terminal; it may, for example, be /dev/tty").
Kdyby dva z nás byli dvěma z nich, všichni z nás by mohli být všemi z nich.
28.8.2004 22:40 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše Re: Cecko -- prime cteni z terminalu
Čtení /dev/tty asi bude 99 % případů fungovat stejně dobře, a v tom zbytku bude stejná šance, že neexistuje/nefunguje ctermid(), jako že nefunguje /dev/tty ... no, ale je to takové pěkně POSIXové ;-)

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.