Форум программистов, компьютерный форум CyberForum.ru

Динамически изменяющаяся строка - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Указатель на пользовательский тип http://www.cyberforum.ru/cpp/thread157677.html
Чёто туплю, почему когда передаёшь переменную (например int) параметром через адрес в функцию (параметр - указатель на этот тип), то в теле этой функции для доступа к этой переменной приходится обращаться через указатель как через массив, причём работает только для , а дальше выдаёт ошибку. Вообще что значит это? Почему не 1 а 3 элемента и вообще как это так с точки зрения компилятора ...
C++ Распараллеливание программы Пишу брутер и встал вопрос о добавление многопоточности. Вот у меня есть функция: std::string wbfunc(std::string& hash) { std::string line; std::ifstream f("/home/hromjo/d"); while (std::getline(f, line)) { if (md5(line) == hash) { return line; http://www.cyberforum.ru/cpp/thread157205.html
Обработка кнопки C++
У меян есть вот такая идея!я решил написать небольшую программку куда пользователь будет вводить свой майл и свой пароль потом при нажатии на клавишу данные будут сохраняться в файл,вот все что я написал это сделать легко а вот как сделать что при нажатии тот файл передался мне на мыло по инету?
Нужен пример перехвата API функции на Detours!!! C++
В долгих поисках пришел к выводу использовать Detours для отлова пакетов. Где можно найти рабочий исходник отлова какой-нибудь функции (желательно Send/Recv)?
C++ Программа в OpenCL http://www.cyberforum.ru/cpp/thread156513.html
Братцы, сроки поджимают и нужно закончить программульку одну. В общем, делал-делал и пришёл я к тупику на данном этапе... не знаю, что и делать. Изначально программа должна была высчитывать с помощью ЦПУ корень из числа. На выходе получается большое отрицательное число. Помогите пожалуйста исправить ошибки. #include <stdafx.h> #include <CL/cl.h>
C++ Параллельное действие Как сделать действие параллельным? Если например сделать что бы слово всегда меняло цвет, то программа зациклится на этом, и другие действия выполнять не будет. подробнее

Показать сообщение отдельно
easybudda
Эксперт С++
9460 / 5473 / 927
Регистрация: 25.07.2009
Сообщений: 10,495
07.08.2010, 00:07     Динамически изменяющаяся строка
Цитата Сообщение от Alexoy Посмотреть сообщение
Идея - чтоб текст, допустим каждую секунду, прорисовывался начиная с одной и тойже позиции, а не под предыдущим.
И как Вы себе это представляете? Вывести весь файл, а потом прокрутить окно назад к первой выведенной строчке? Это Вам куда-нибудь в сторону ncurses рыть надо...

Просто из спортивного интереса сделал програмку, суть которой вот, в чём: программе передаётся параметром файл, за которым нужно следить (файл должен хотя бы существовать). При появлении в файле новых данных программа выводит их вместе со временем.
выглядит примерно так: в первой консоли
Код
echo "First line" > watch.txt
./read_last watch.txt
за тем открыл вторую консоль и в ней
Код
echo "bla bla bla" >> watch.txt
echo "one two three" >> watch.txt
ну и так далее...
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#include <stdio.h>
#include <stdlib.h>
#include <sys/time.h>
#include <sys/types.h>
#include <unistd.h>
#include <fcntl.h>
 
#define BUF_LEN 4096
#define TIMEOUT 1
 
int main(int argc, char ** argv){
    int fd, ret;
    struct timeval tv;
    fd_set readfds;
    time_t tsec;
    struct tm * pStm;
    char readBuf[BUF_LEN];
 
    if ( argc < 2 ){
        printf("Usage: %s file_name", argv[0]);
        exit(1);
    }
 
    if ( ( fd = open(argv[1], O_RDONLY) ) == -1 ){
        perror("open");
        exit(1);
    }
 
    while ( 1 ){
 
        FD_ZERO(&readfds);
        FD_SET(fd, &readfds);
 
        tv.tv_sec = TIMEOUT;
        tv.tv_usec = 0;
 
        ret = select(fd + 1, &readfds, NULL, NULL, &tv);
        if ( ret == -1 ){
            perror("select");
            exit(1);
        }
 
        if ( ! ret )
            continue;
 
        tsec = time(NULL);
        pStm = localtime(&tsec);
 
        if ( FD_ISSET(fd, &readfds) ){
            ret = read(fd, readBuf, BUF_LEN - 1);
            if ( ret == -1 ){
                perror("read");
                exit(1);
            }
            if ( ! ret )
                continue;
            readBuf[ret] = 0;
            system("clear");
            printf("Last incomming data in file %s at %s\n%s", argv[1], asctime(pStm), readBuf);
        }
    }
 
    close(fd);
    exit(0);
}
правда, выход из неё только Ctrl+C, но можно это поправить...

Добавлено через 6 часов 59 минут
Всё то же самое, только выходит по нажатию enter
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/poll.h>
#include <time.h>
 
#define BUF_LEN 4096
#define TIMEOUT 1
 
int main(int argc, char ** argv){
    char buf[BUF_LEN];
    int fd, ret;
    struct pollfd fds[2];
    time_t nSec;
    struct tm * pTm;
    
    if ( argc < 2 ){
        printf("Usage: %s file_name\n", argv[0]);
        exit(EXIT_FAILURE);
    }
    if ( ( fd = open(argv[1], O_RDONLY) ) == -1 ){
        perror("open");
        exit(EXIT_FAILURE);
    }
    
    fds[0].fd = fd;
    fds[0].events = POLLIN;
    
    fds[1].fd = STDIN_FILENO;
    fds[1].events = POLLIN;
    
    *buf = '\0';
    
    while ( 1 ){
        if ( ( ret = poll(fds, 2, TIMEOUT * 1000) ) == -1 ){
            perror("poll");
            exit(EXIT_FAILURE);
        }
        if ( ! ret )
            continue;
    //  printf("%d streams avaible\n", ret);
        if ( ret == 1 ){
            if ( fds[0].revents & POLLIN ){
                if ( ( ret = read(fd, buf, BUF_LEN - 1) ) == -1 ){
                    perror("read");
                    exit(EXIT_FAILURE);
                }
                if ( ! ret )
                    continue;
                buf[ret] = '\0';
                nSec = time(NULL);
                pTm = localtime(&nSec);
                system("clear");
                printf("Press ENTER when done.\n");
                printf("Last data in file %s at %s\n%s", argv[1], asctime(pTm), buf);
            }
        }
        else if ( fds[1].revents & POLLIN ){
            close(fd);
            read(STDIN_FILENO, buf, BUF_LEN - 1);
            break;
        }
    }
    
    exit(EXIT_SUCCESS);
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru