C言語なら俺に聞け 148

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (アウアウカー Sacf-slpW)
垢版 |
2018/09/19(水) 17:56:50.83ID:XSTNMnDwa
C言語の話題のみ取り扱います C++の話題はC++スレへ
質問には最低限の情報(ソース/コンパイラ/OS)を付ける
数行で収まらないソースは以下を適当に使ってURLを晒す
https://paiza.io/
https://ideone.com/
http://codepad.org/

C11
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.pdf

C99
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf
http://kikakurui.com/x3/X3010-2003-01.html

C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/

JPCERT C コーディングスタンダード
https://www.jpcert.or.jp/sc-rules/

※前スレ
C言語なら俺に聞け 147
http://mevius.5ch.net/test/read.cgi/tech/1534430162/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
2018/09/29(土) 19:34:28.70ID:oiqQJDSj0
>>434
俺はLinusの意見には同意だぞ。
ただ、それはC++が糞だと言っているのであって、Cがいいと言っているわけではない。
そして、俺が初心者に勧めるのはLL言語だ。(Ruby/Python/JavaScript/(PHP))
これらにはインタプリタ環境がある。それだけで初心者には全然違う。

それ以前に、型等の恩恵を受けたいのならC#の方が断然良い。
というか、後発言語はC言語の駄目な点を改良してきているのだから当然いろいろ優れている。
C++もこれに含まれる。だからC++も『正しく使えば』いい言語だ。
当たり前だがほぼ上位互換な訳でね。


>>435
ああ、それなら、以下を付け加えておこう。
5. C以外の環境がない
2018/09/29(土) 19:48:34.77ID:PPHj/b7C0
#if 0
って今となっては不要だよね。
なぜならフレームワークを適当に設定することで開発用と製品用のコードを分離できるようになってるから
VCSでブランチ切ってもいいし。
2018/09/29(土) 20:04:11.39ID:oiqQJDSj0
>>437
https://stackoverflow.com/questions/3630601/why-use-if-0-for-block-commenting-out/3631513
要するにブロックコメントをブロックでコメントアウトするのに便利、だそうな。
ルールでなら // に統一しろ、とか言われる所だな。

(VCSというか)今はGit全盛だが、勿論それらもなかった頃からCは全面的に使われていたので、
今となっては古い(原始的)と思える機能も沢山ある。
これは古い言語の宿命だからある程度致し方ない。
コーディングルールでも「あれは白黒ディスプレイの為の物」と言われているものあるだろ。
2018/09/29(土) 22:15:37.87ID:UH1zl1PU0
>>435
ワンチップマイコンだとアセンブラも有力
440デフォルトの名無しさん (ワッチョイ 9740-K3KX)
垢版 |
2018/09/29(土) 22:38:18.17ID:gtdSXLh90
forthって組み込み系でもう使ってないの?
2018/09/29(土) 22:39:39.91ID:s2JlOOSC0
>>440
使いやすい言語だとは思わないけどな
2018/09/29(土) 23:11:41.46ID:X4waiIaR0
>>440
そもそも最近使われてるのを見たことない

>>441
処理系が軽いのよ
2018/09/29(土) 23:32:32.75ID:ozlzkqfsa
postscriptは割と使ってるかもな。知らんが。
2018/09/30(日) 00:28:39.07ID:YvS5SBel0
今をときめくpythonの大部分がCだろ
便利なimport含めて
2018/09/30(日) 00:51:11.84ID:QRI6I66L0
最近プログラミングに熱意が持てなくなってきた
だれかたすけて・・・
2018/09/30(日) 00:53:49.78ID:mUWBdCHT0
言語作ろうぜ
あるいはハード作ろうぜ
2018/09/30(日) 13:35:46.44ID:8vGviIsrM
ここのレベルじゃ無理
448デフォルトの名無しさん (ワッチョイ bf9f-aemA)
垢版 |
2018/09/30(日) 19:56:21.83ID:KPqVv5wd0
とりあえず昔のC++みたいにC言語へのトランスレーターで作っとけよ。
2018/09/30(日) 20:08:07.13ID:pfgCoU5B0
昔々、とあるマクロ言語を開発してた頃はyacc/lex(bison/flex)を使ってたんだが、今どきもこういうコンパイラコンパイラを使ったりするんだろうか?
2018/09/30(日) 20:08:42.93ID:PasHsNHY0
>>440
ForthってMINDのベースって事くらいしか知らない
451デフォルトの名無しさん (ワッチョイ 9740-K3KX)
垢版 |
2018/09/30(日) 20:25:52.96ID:CSkWhxVk0
sedとかで十分なことでもgoでパーサ使う人はいるな
452デフォルトの名無しさん (ワッチョイ f79f-ZVm4)
垢版 |
2018/09/30(日) 21:41:15.10ID:ZDEBOTA70
質問です。
ソースが公開されてないライブラリを使用していまして
その中に特殊なファイルを読み込む関数があります。
事情があってその特殊なファイルを暗号化して保存したいのですが
暗号化してしまうとそのライブラリの関数から直接読み込めません。
暗号を解除する関数を通してそれが一時ファイルを吐けば可能ですが
大量にあるので出来ればもっと良い方法があればそれを採用したいと思っています。
例えば暗号解除後そのままメモリをファイルの様に扱う等は出来ないでしょうか?
よろしくおねがいします。
2018/09/30(日) 21:50:14.42ID:pfgCoU5B0
>>452
OSが分かんないけどtmpfsとか駄目なの?
2018/09/30(日) 22:13:05.28ID:vpsmo7Y3a
read/writeを包んじゃうとか。LD_PRELOAD的な。
実行中のメモリが読めるならなんでもありという気もするが
2018/09/30(日) 22:17:19.98ID:ZDEBOTA70
>>453-454
さっそくありがとうございます!OSはWindowsです。
方法はありそうですね?
教えてもらったキーワードで自分でも少し調べてみます!
2018/09/30(日) 22:21:51.99ID:6gTyS6vx0
そのライブラリの特殊なファイルを読み込む関数のインターフェースはファイル名を求めているのだろうか?
それともファイルへのハンドルを求めているのだろうか?

前者と仮定してうまく凌ぐ方法はあんのかな? 名前付きマッピングオブジェクトかなんか?
2018/09/30(日) 22:25:01.08ID:ZDEBOTA70
>>456
ありがとうございます。ファイル名です。
OSはWin10です。
2018/09/30(日) 22:27:41.29ID:ZDEBOTA70
tmpfsはWinだと使えないのですね?残念です。これはまさに理想的だったので。
LD_PRELOADは関数を上書きできるのですね。こちら更に調べてみます。
2018/10/01(月) 00:45:26.18ID:0BEK1cUt0
どれもWindowsじゃ無理っぽいですね… tmpfsが使えれば一番よかったんですが。
2018/10/01(月) 03:15:04.29ID:p5nbtFpra
FILE*で文字を直接参照するのと一旦文字の配列にコピーして参照するのとでは速度差はありますか?
2018/10/01(月) 04:00:25.04ID:2PPz6CoJ0
コピーするのに、メモリ・時間を使うから、

コピーしない方が速い
2018/10/01(月) 05:28:57.52ID:qsdLJDx40
>>460
コピーせずに直接参照ってどうやるの?
2018/10/01(月) 05:37:04.66ID:kFV2gm8E0
>>459
WindowsでもRAMDiskは作れる(そういうツールがある)けど、エレガントな方法はファイル系のAPIをHookするって手もあるかな?
2018/10/01(月) 09:06:42.48ID:Qvezncj/0
>>411
これなんてエディタ? 秀丸?
2018/10/01(月) 09:25:37.38ID:bI30HRk50
Spyderだろ
2018/10/01(月) 09:27:43.52ID:2PPz6CoJ0
メモリファイルは無いの?
2018/10/01(月) 09:33:21.48ID:UNHR2HPsx
メモリマップトファイルが使えれば良いんだけど、バイナリ提供内部でファイル名で直接CreateFileしちゃってるなら難しいんじゃないかな?
俺が知らないだけでうまい方法があるかもだけど。
2018/10/01(月) 09:51:55.51ID:7/sdPVVo0
>>452
ちなみにどんなファイルを読むライブラリなの?
比較的単純なら自分で書き直す方が早いんじゃね?と思ったり。
sqlite みたいなのになってくると手に負えなそうだけど。
2018/10/01(月) 10:05:04.00ID:5qQ+3kFva
暗号化したボリュームに書き込みたいとかいう話ではないんだよな
2018/10/01(月) 12:02:16.95ID:qsdLJDx40
ファイルマッピングだって、結局はディスク上のファイルイメージをメモリにキャッシュするだけだぞ
ライトバックキャッシュなので「書き戻せ」というコマンドを自分では書かないから
何か特殊なもののように誤解されやすいが、
ハード的にCSやWEがチャネルコマンドに変換されるとかそういうことは一切ない
2018/10/01(月) 12:05:58.57ID:AKKTs5+S0
名前付パイプ渡してうまくいくといいなー ぐらい
2018/10/01(月) 12:18:15.13ID:e2K2pEIVa
パス名でしか読み込めないクソライブラリをありもので解決するならramdiskしかないな
ライブラリを修正できるなら俺だったら読み込み処理をコールバックにする
2018/10/01(月) 12:26:59.19ID:0BEK1cUt0
みなさんありがとうございます。むずかしそうですね…
ファイルの仕様も公開されてないので自分で描き直すのもむずかしいです…
理想的な流れとして以下のように出来ればいいのですがむずかしいのですかね…
1 暗号化したファイル読み込み
2 暗号解除
3 メモリに元ファイルとして生成
4 ファイル名を元ファイルを読み込む関数に渡してメモリ上のファイルを読み込む
2018/10/01(月) 12:28:50.21ID:0BEK1cUt0
>>472
ramdiskですか。ちょっとそちらで調べてみます。ありがとうございます。
2018/10/01(月) 12:47:38.04ID:AKKTs5+S0
ramdisk も中間ファイル書き出してその名前を渡すのとかわらんでしょ
いずれにしろ復号済みのファイルが実体化しちゃってる
2018/10/01(月) 12:57:10.39ID:UNHR2HPsx
>>473
難しいというか、技術的な実現方法はいくつか思いつくけど要件がよく分からないのでこれにすべきと言えないだけ。
2018/10/01(月) 13:02:33.93ID:e2K2pEIVa
>>474
面倒な手順だけど、fuse+ramfsってのもあるか
windowsにramfsがあるか知らんけど
478デフォルトの名無しさん (アウアウカー Saab-XaUO)
垢版 |
2018/10/01(月) 13:15:50.57ID:yvyswmJaa
>>473
RAMディスクなら速いだろうけど普通のファイルシステムとアクセス方法は同じだから普通にディスクにファイル作っても同じだよ。
そのディスクがSSDならば正にRAMディスクだしな(ちょっと遅いかも知れないが)。

そのファイルは本当にRAMディスクのような高速アクセスできるようなファイルシステム上に作らねばならないものなのか?
2018/10/01(月) 13:19:01.59ID:0BEK1cUt0
>>475-477
みなさんありがとうございます。
要件としては元のファイル自体が公開されているライブラリで読み込めてしまうのでそれを防止したいんです。
ようは簡単に読み込めなく出来ればいいだけなんですね。
>>473でも一応メモリ内に復号後のものが実体化されちゃいますがとりあえずこれが出来ればいいかなと。
もう少し自分でも色々調べてみます。
2018/10/01(月) 13:21:27.31ID:AKKTs5+S0
>>479
メモリ内だけじゃなくエクスプローラから丸みえだし、ファイルも普通に読み書きできるよ? <ramdisk
2018/10/01(月) 13:24:04.57ID:0BEK1cUt0
>>478
なんというか単に目に見えるところに作りたくないというだけなんですね。
原理的には読めちゃうんだと思いますがとりあえず素で通常のディスクに書き出すよりは少しはマシかなと。
2018/10/01(月) 13:25:19.86ID:0BEK1cUt0
>>480
ramdiskはそうなんですね… それだとマズイなあ…
やっぱり見えない形で展開できればいいんですが。
2018/10/01(月) 13:30:03.85ID:UNHR2HPsx
RAMDiskをNTFSでフォーマットして適切なPermission管理すれば良いんじゃね?
2018/10/01(月) 13:40:12.23ID:0BEK1cUt0
あとRAMDiskについては使用者のPCに勝手にそういう領域を作っても問題ないのかも気になりました。
アプリが終了すれば常に確実に領域がクリアされ解放されればいいんですが何かのアクシデントで残ってしまわないかとか。
もうちょっと自分でも色々考えてみます。
2018/10/01(月) 14:13:49.93ID:2kmJAioya
隠蔽かつ高揮発?を実現したいということならいろいろありそう。
windowsのfuseって昔あったよな。
2018/10/01(月) 14:51:25.74ID:tOl4q5VhM
Windows詳しいマンはおらんのか
2018/10/01(月) 14:56:04.14ID:n3AkgheKM
だからAPI Hookだって。
2018/10/01(月) 17:27:27.14ID:sRgrdSMiM
すでに出てるけど、名前付きパイプかファイルマッピングオブジェクトじゃいかんのか
2018/10/01(月) 17:41:52.83ID:qsdLJDx40
Windowsの話してやってんのに通じないやつが何か文句言ってらあ
2018/10/01(月) 19:43:43.06ID:3ZN7cetya
パス名経由でしか読み込めないんだからありもので対処するならOS経由の手段に限られる
クソライブラリに手を加えられないなら自作するかramdiskで我慢するしかないよ
2018/10/01(月) 20:18:05.62ID:xRBX1/Y3M
もちろんwindowsの話なんだけどな
2018/10/01(月) 20:50:02.06ID:73T+9RSN0
>>487 狙うとすれば ReadFile あたりだろうけど、あまりに根っこ過ぎて
ちゃんと狙い撃ちしたい箇所だけに限定できるのか正直わからんところ
2018/10/01(月) 21:43:55.95ID:n3AkgheKM
>>492
狙うならCreateFileだと考えてた。
予めメモリマツプトファイルに復号化しておいてそのハンドル返せば、後はReadFileはHookしなくても煮るなり焼くなり好きにしてもらったら良いと。
2018/10/01(月) 21:58:38.38ID:2kmJAioya
dropboxとか具体的にどういう技術なん?
2018/10/01(月) 22:54:48.81ID:2yHgzixG0
APIHookかVFSを自分で実装するかになるんじゃね
前者の方が簡単そうだな
496デフォルトの名無しさん (ワッチョイ 5780-q1nr)
垢版 |
2018/10/01(月) 23:58:25.83ID:zfKNS/F/0
CreateFileMappingにわたすCreateFileのファイルハンドルは
すでにファイルシステムと関連付けられたファイルハンドルになる

メモリならINVALID_HANDLE_VALUEを渡す

ドキュメントにしっかり書いてあるのに
相変わらず低学歴知恵遅れは
口からデマカセの頭悪いテキトーなことばっかりいってるわ。。。
497デフォルトの名無しさん (ワッチョイ 5780-q1nr)
垢版 |
2018/10/02(火) 00:01:04.71ID:R8M7QKDK0
そもそも質問してるヤツはファイルシステムに復号化されたファイルができるのがダメといってるのに
相変わらずだわ。。。
2018/10/02(火) 00:19:59.97ID:9fPP7dMwM
ならばどうする半角よ
貴様の格の違いを見せてやれ
2018/10/02(火) 00:24:37.79ID:69sVZg4Ka
この流れで初書き込みだけどソースが公開されていないで思いどうりに読み込めないのであれば自分で実装したほうがいいんじゃね
バイナリモードで読み込めばいいんじゃないの
500デフォルトの名無しさん (ワッチョイ ffe9-WJev)
垢版 |
2018/10/02(火) 00:31:01.73ID:Cp0nvcbE0
また自演か
2018/10/02(火) 00:35:23.62ID:nity8XPfa
499だけどオレが自演って事になってるのか?
2018/10/02(火) 00:40:31.83ID:6wQ+/Q1Ma
dropboxは非同期にrsyncみたいなことしてる感じだな。
ここで求められてるのは同期だね
503デフォルトの名無しさん (ワッチョイ 5780-q1nr)
垢版 |
2018/10/02(火) 00:55:56.80ID:R8M7QKDK0
検討がつかない

そもそも使ってる関数のソースが未公開の前提らしいからな
中でなにやってるかなんかまったく分からんからこういう質問してるんだろうしな
きっとReadFileを呼んでるのだろうという程度のことしか分からない
それは質問してるヤツもその程度は分かってるハズ

そして、そのファイルを読み込む関数のインターフェースもよく分からない
ファイルハンドルを渡すのかファイルパス渡すとかも分からない

情報が一切ないから検討しようがないといいたいが
両方とも検討した結果、簡単ないい方法が思いつかない
別プロセスにしてCONIN$使うとかインチキくさい方法ぐらいしかパッと思いつかなかった

でな、この要件に至るまでの根本的な部分について知りたい
その暗号化したファイルを今までどうやって出力してたかという部分になる
読み込みはその操作と逆の操作をすればいいハズだからな

もし暗号化して出力するときに、平文のファイルを一時的にテンポラリに出力してから暗号化してるなら
入力するときに平文のファイルを一時的にテンポラリに出力するのは許容範囲になると言い張れれば
コレで解決する

コレでイケルハズ
2018/10/02(火) 01:03:57.23ID:6wQ+/Q1Ma
そうじゃなくて、生データを隠したいんじゃないか?
2018/10/02(火) 02:49:53.61ID:qS1Sk5MG0
みなさん色々と案をありがとうございます。
あれから自分で調べたり考えたりしてたんですが
どうにかファイルの構造を知る事が出来そうで
中身を自分で書き換える(復号化ロジック込みの読み込み関数を書く)事にしました。
非常にお騒がせしてしまいまして申し訳ございませんでした!
2018/10/02(火) 04:36:17.92ID:yoF3UpeG0
Cのテスト関係のツールでおすすめとかありますか?
業務ではなく個人の趣味としてのプログラミングなので,できれば無償・オープンソースなのがいいです。
https://en.wikipedia.org/wiki/List_of_unit_testing_frameworks#C
ここを見ると,やはりCに関しても単体テストが最適なようですが…
507デフォルトの名無しさん (ワッチョイ ffe9-WJev)
垢版 |
2018/10/02(火) 04:42:42.21ID:Cp0nvcbE0
本当に自演が大好きなんだな
2018/10/02(火) 06:50:29.85ID:yoF3UpeG0
? え,もしかして俺に対して?
そうだとしたら まったくの言い掛かりなんだけど……。
純粋に,単体テストのおすすめを訊きたいだけ。
2018/10/02(火) 11:07:45.33ID:Yfg2/nZYa
>>508
世の中のすべてが自演に見えちゃう病気の人かも知れないから、スルーしておけばいいんじゃない?
2018/10/02(火) 11:08:35.53ID:EEmEj/et0
まーた自演か
511デフォルトの名無しさん (アウアウカー Saab-XaUO)
垢版 |
2018/10/02(火) 12:14:34.37ID:RjhRAQY1a
まーた自演か
2018/10/02(火) 13:22:40.96ID:kk/2dA0Y0
「自演じゃないもん」なんて弁明しても証明できないところで相手すんなよ
無駄なことをする姿がバカっぽいぞ
513デフォルトの名無しさん (アウアウカー Saab-XaUO)
垢版 |
2018/10/02(火) 13:39:01.10ID:RjhRAQY1a
自演じゃないもん
2018/10/02(火) 19:19:05.31ID:Fj/XybmQM
ウィザードブックで勉強したって方いますか?
Cのレベル上げにも役立つかしら・・・
515デフォルトの名無しさん (ワッチョイ 5780-q1nr)
垢版 |
2018/10/02(火) 20:40:47.26ID:R8M7QKDK0
ココまでオレのジエン
516デフォルトの名無しさん (アウアウカー Saab-XaUO)
垢版 |
2018/10/02(火) 20:51:11.45ID:hjXu6C7/a
>>514
ウィザードブックってなに?
2018/10/02(火) 20:53:08.03ID:pF626ax10
魔法使いがevalとapplyの球もってる奴じゃね
2018/10/02(火) 22:09:38.52ID:Fj/XybmQM
愛称違ったっけ?
『計算機プログラムの構造と解釈』です

>>517
です
λのやつ
2018/10/02(火) 22:37:55.33ID:WWljJiuT0
>>518
一般の人間が翻訳に参入しているようですね
2018/10/03(水) 00:45:37.81ID:+GJzyh+A0
>>518
愛称はSICPな。
http://sicpvn.sdf.org/smug.jpg

つか、全文訳されて公開されてるのな。
https://github.com/minghai/sicp-pdf/

詳細は以下。
https://qiita.com/kaz-yos/items/d1ecd4bfe9989c290e99
https://cpplover.blogspot.com/2016/05/mitsicp.html

なお、俺は読んだこと無い。
2018/10/03(水) 04:12:13.38ID:zPlOwhsg0
またトリップ付けないで書き込みしたの?
荒らしはもうやめておいた方が良いと思う
2018/10/03(水) 06:56:42.02ID:R1dsfyjz0
>>521
>またトリップ付けないで書き込みしたの?
>荒らしはもうやめておいた方が良いと思う

トリップつけないで書き込みするとどうして荒らしになるのですか?
というか、ほとんどの人がトリップをつけていないので、5ch は荒らしだらけ、ということですか?
2018/10/03(水) 07:02:45.12ID:IEc6BJqm0
アホは相手すんな
2018/10/05(金) 10:05:15.64ID:DxqDA2/Ip
https://i.imgur.com/BsiX5iK.jpg

添削お願いします。
2018/10/05(金) 10:17:32.97ID:6zSKEd8l0
>>524
minute と second は while の中のスコープで宣言するといい。
あと second を printf する時、お前のやりたいことは多分 %02d でできる。
0詰め2桁表示ね。
2018/10/05(金) 10:21:58.92ID:3s3m6VbBM
sleepは1秒待ってくれるとして、
前後の処理がどうしても正確に0秒でできるわけではないので誤差が溜まっていく。
定期的にシステムの時刻を見て秒の変わり目を検出するほうが正確。
2018/10/05(金) 10:26:30.21ID:6zSKEd8l0
>>524
これはこうすべきってことでないけど、画面を消す clear、これが何をやってるか調べると面白いかもよ。
とりあえず
clear > log
とかやって log に何が書かれてるか見てみるといい。
次に
cat log
とやると何が起こるか確かめてみるといい。
これがわかると画面を消すのに clear なんて外部コマンドを使わなくてもよくなる。
2018/10/05(金) 10:44:56.64ID:uhmiVRnQa
>>524
whileとelseは直後に空白あける。
2018/10/05(金) 11:16:24.26ID:DxqDA2/Ip
https://i.imgur.com/ldQVwUT.jpg
↑ソースコード

https://i.imgur.com/eCYNPsi.jpg
↑実行結果

となりました。
「set number」と「syntax on」を初期設定したいのですが、どうすればいいですか?
2018/10/05(金) 11:16:46.89ID:FRcGP58U0
free run counter
2018/10/05(金) 11:19:04.80ID:DxqDA2/Ip
あと、iPhoneのタイマーと比べた結果カウントが遅くなっていたことがわかりました。これは前後の関数を実行する際にノータイムでは出来ないことが原因だと考えられます。
2018/10/05(金) 11:20:50.09ID:6zSKEd8l0
>>529
ちょっとまて、>>527 を試そうとしてる雰囲気だけど、clear > log とか cat log はソースコードに埋めるんじゃなく、コマンドラインとして叩くんだよ。
2018/10/05(金) 11:44:12.58ID:DxqDA2/Ip
https://i.imgur.com/5usTieQ.jpg

流れが速くて打てません。
2018/10/05(金) 11:54:29.41ID:DxqDA2/Ip
while の中でminute,secondを宣言したら回るたびに宣言する事になるので、なんかダメだと思いました。

あと、ちゃんとしたタイマーを作るにはどうすればいいのか知りたいです。
2018/10/05(金) 11:56:56.95ID:aS2keCHZa
画面が流れるんでなくて、部分的に書き換えたい感じ?
cursesを使うのじゃ
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況