Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Ubuntu_linux от Сентябрь 25, 2012, 14:56



Название: Вивести файл в консоль
Отправлено: Ubuntu_linux от Сентябрь 25, 2012, 14:56
Как можно бинарный файл вывести в консоль? (линукс)


Название: Re: Вивести файл в консоль
Отправлено: mutineer от Сентябрь 25, 2012, 14:57
cat имя_файла


Название: Re: Вивести файл в консоль
Отправлено: Пантер от Сентябрь 25, 2012, 14:59
dog имя_файла


Название: Re: Вивести файл в консоль
Отправлено: Ubuntu_linux от Сентябрь 25, 2012, 15:00
Да, но мне надо средствами Qt!


Название: Re: Вивести файл в консоль
Отправлено: mutineer от Сентябрь 25, 2012, 15:02
Да, но мне надо средствами Qt!

Да? Сорри, не прочитал мысли...
Читаешь файлик в ByteArray, а потом выводишь через qDebug, например


Название: Re: Вивести файл в консоль
Отправлено: Пантер от Сентябрь 25, 2012, 15:06
Дык ты правильно формируй свои мысли. qDebug или std::cout.


Название: Re: Вивести файл в консоль
Отправлено: Ubuntu_linux от Сентябрь 25, 2012, 15:14
Дело в том, что так обламывается  на первых символах!


Название: Re: Вивести файл в консоль
Отправлено: mutineer от Сентябрь 25, 2012, 15:16
А если в консоли сделать cat этого файла?


Название: Re: Вивести файл в консоль
Отправлено: Ubuntu_linux от Сентябрь 25, 2012, 15:17
А если в консоли сделать cat этого файла?
cat -нормально.


Название: Re: Вивести файл в консоль
Отправлено: Пантер от Сентябрь 25, 2012, 15:19
Показывай код.


Название: Re: Вивести файл в консоль
Отправлено: GreatSnake от Сентябрь 25, 2012, 15:25
Дело в том, что так обламывается  на первых символах!
Конечно, если не экранировать управляющие символы, то так и будет.


Название: Re: Вивести файл в консоль
Отправлено: Ubuntu_linux от Сентябрь 25, 2012, 15:28
Та ничего особенного:

std::cout<<file.readAll().data();

qDebug()<<file.readAll();


Название: Re: Вивести файл в консоль
Отправлено: Ubuntu_linux от Сентябрь 25, 2012, 15:30
Дело в том, что так обламывается  на первых символах!
Конечно, если не экранировать управляющие символы, то так и будет.
Как?


Название: Re: Вивести файл в консоль
Отправлено: Пантер от Сентябрь 25, 2012, 15:41
Может, опишешь лучше свою задачу?


Название: Re: Вивести файл в консоль
Отправлено: Ubuntu_linux от Сентябрь 25, 2012, 15:46
Надо написать аналога tail  утилитки, только в режиме реального времени!
Для того чтобы постепенно передавать(во время загрузки на диск) файл в ffmpeg.

Код
Bash
wget http://example.com/test.avi
tail -c+0 test.avi | ffmpeg -i - -vcodec=mpeg4 -acodec copy -y out.mp4
 


Название: Re: Вивести файл в консоль
Отправлено: GreatSnake от Сентябрь 25, 2012, 15:48
И зачем для этого тебе понадобилась консоль ???


Название: Re: Вивести файл в консоль
Отправлено: Пантер от Сентябрь 25, 2012, 15:57
tail -f работает в режиме реального времени.
Но тут tail совсем не нужен.


Название: Re: Вивести файл в консоль
Отправлено: Ubuntu_linux от Сентябрь 25, 2012, 16:04
tail -f работает в режиме реального времени.
Но тут tail совсем не нужен.

неа
 man tail
.......
--sleep-interval=N
     Change the number of seconds to wait between iterations (the
     default is 1
).  During one iteration, every specified file is
     checked to see if it has changed size.
.......

И как тут обойтись  без tail ?


Название: Re: Вивести файл в консоль
Отправлено: Ubuntu_linux от Сентябрь 25, 2012, 16:12
И зачем для этого тебе понадобилась консоль ???
Чтобы передать поток с файла в ffmpeg  по мере того как он загружается.


Название: Re: Вивести файл в консоль
Отправлено: Alex Custov от Сентябрь 25, 2012, 19:06
И зачем для этого тебе понадобилась консоль ???
Чтобы передать поток с файла в ffmpeg  по мере того как он загружается.

Создай FIFO, и пиши загружаемые данные в него.  Этот FIFO передай ffmpeg через пайп (|)


Название: Re: Вивести файл в консоль
Отправлено: Ubuntu_linux от Сентябрь 25, 2012, 19:26
И зачем для этого тебе понадобилась консоль ???
Чтобы передать поток с файла в ffmpeg  по мере того как он загружается.

Создай FIFO, и пиши загружаемые данные в него.  Этот FIFO передай ffmpeg через пайп (|)

Можно пример?


Название: Re: Вивести файл в консоль
Отправлено: VPS от Сентябрь 25, 2012, 19:57
Можно попробовать использовать перенаправление буфера файлового потока в нужный поток:
Код:
ifstream ifs("file_name", ios::binary);
assert(ifs);
cout << ifs.rdbuf();


Название: Re: Вивести файл в консоль
Отправлено: Patrin Andrey от Сентябрь 25, 2012, 20:09
При такой схеме (прога-файл-ффмпег) вероятнее всего(рано или поздно) возникнет проблема, что ты ещё не успел записать в файл, а ффмпег уже дошёл до конца файла и прекратит попытки прочитать следующую порцию данных.
Как дела обстоят в этом случае с пайпами не знаю, но есть вероятность что попытается подождать.


Название: Re: Вивести файл в консоль
Отправлено: Ubuntu_linux от Сентябрь 26, 2012, 01:18
При такой схеме (прога-файл-ффмпег) вероятнее всего(рано или поздно) возникнет проблема, что ты ещё не успел записать в файл, а ффмпег уже дошёл до конца файла и прекратит попытки прочитать следующую порцию данных.
Как дела обстоят в этом случае с пайпами не знаю, но есть вероятность что попытается подождать.
Получилось, но теперь проблема с "...не успел записать в файл, а ффмпег уже дошёл до конца файла и прекратит попытки прочитать следующую порцию данных"
Хотя с прогой tail все четко успевало..
А как прикрутить пайпы?

void Data::printData(){
    if(!isDebug){
    ifstream ifs(m_path.toAscii()+m_name.toAscii(),ios_base::binary);
    //assert(ifs);//?
    ifs.seekg(lastPos);
    cout<<ifs.rdbuf();
    lastPos=ifs.tellg();
    ifs.close();
    }//debug
    else{
        printf("Same rand number: %ld \n",rand());}
}//printData