2015-06-21 58 views
0

所以我有程序,通過將字符串管道輸入stdin來轉換數據,就像這樣。命令行工具可以像Windows那樣在Windows中以二進制數據的形式獲取字符串?

cat input.mp3 | myexe 

除了我想讓這個命令行工具在Windows上運行。

type input.mp3 | myexe.exe 

和貓和類型提供,因爲Windows如何對待根據所提到我用貓的問題二進制文件不同的輸入。那麼我怎麼能在Windows上更加忠實地表現貓呢?或者有沒有一種方法可以讓純C中的貓輸入?任何幫助,將不勝感激。

更新:這裏是我的代碼 https://github.com/Skylion007/LVDOWin

分叉並移植自: https://github.com/m13253/lvdo

我已經修改了參數在我自己的代碼稍微解析(只得到-OPT得不到-OPT長),除此之外,我在後面的回購中使用自述文件的相同命令行語句。我會在這裏發佈代碼,但是有很多問題,我不希望壓倒已經很複雜的答案。

type hello.mp3 | lvdoenc.exe -s 640x480 -q 6 -b8 | x264 --input-res 640x480 --fps 1 --profile high --level 5.1 --tune stillimage --crf 22 --colormatrix bt709 --me dia --merange 0 -o public.mkv - 

是我最初用來對文件進行編碼的命令的一個例子。在Linux上,我會使用貓。

+1

查看unxutils(http://unxutils.sourceforge.net/)for Windows版本的cat和其他實用程序。 – jarmod

回答

2

您可以直接從文件中這樣輸入重定向:

myexe < input.mp3 

和力stdin爲二進制模式在main函數的開頭這樣在myexe

_setmode(_fileno(stdin), O_BINARY); 

您可能需要根據您的工具版本添加或刪除下劃線。

文本模式與二進制模式是從微觀計算的黑暗時代繼承的Windows奇怪。它可以追溯到20世紀70年代,從一個名爲CP/M的受歡迎的MSDOS操作系統中複製出來。 Unix及其所有變種從未擁有過這種功能,Apple很久以前就放棄了非標準的行尾計劃。你不可能在舊的大型機上運行你的代碼,這些舊的大型機在基於行的文本文件上有自己奇怪的概念。

+0

如何將stdin設置爲二進制模式不是在頭文件中完成的?此外,這會影響在其他操作系統上部署此代碼嗎? – Skylion

+0

更新,將模式設置爲二進制,並使用<似乎不起作用。它仍然只編碼標題格式 – Skylion

+0

你的意思是*編碼標題格式*?發佈你的代碼,預期的行爲和意想不到的結果。 – chqrlie

相關問題