C言語なら俺に聞け 148
■ このスレッドは過去ログ倉庫に格納されています
言葉の話だけどcurlは基本的にはHTTPクライアントだ。TCPの上に乗ってる。 TCPクライアントはtelnetとかncだな。ncはUDPも行ける。 TCPも基本的には難しくないが、異常系を考え出すときりがない。 大昔ソケットレベルから自前でHTTPクライアント作ったことある TCPプロトコルを学ぶ良い勉強になるよ 相変わらず低学歴知恵遅れは頭悪いこといってるわ ソケット通信でTCPプロトコルとか オマエがソケット通信でやりとりしてんのはHTTP ホントななんでココまで頭悪いのしかいないのか不思議 トランスファープロトコルにTCP/IP使ってるといっても きっとこのスレの低学歴知恵遅れは意味が分からない smtpもftpもほとんどが普通にtcp/ipだからな いまどきのnetbiosも普通にtcp/ipだからな 昔はトランスファープロトコルにnetbeuiつかってた で、今ではnetbios over tcp/ipで nbtとかなんとかいってる >>561 知らんテクニカルタームは使うときに確認しろよ また低学歴知恵遅れが意味不明ないちゃんもんとけてるし 先にいっとくけどな とてつもなく頭悪いこといってんのオマエだからな まずその自覚がない pop3もtcp/ip sshもtcp/ip httpsもtcp/ip きっとな低学歴知恵遅れには なにをいってるのいかが分からないとは思うわ ホントな低学歴知恵遅れは 頭悪いことを自信満々でいうから困るわ 基本情報どころかITパスポート程度の知識でドヤってるのか 低学歴知遅れ君は それにすら到達してない低学歴知恵遅れが ドヤってるスレがこの板だからな マジで低学歴知恵遅れはこの板から排除したほうがいい 有害 じゃあ「トランスファープロコトル」ってなんだか説明してくれよ… なんだよ「ソケット通信でHTTP」って。 HTTPというのは ハイパーテキストトランスファー プ ロ ト コ ル だからな ソケット通信(トランスファープロトコル意識する必要ない)で HTTPの内容してるだけだ わかった? ソケット通信でHTTPの内容をヤリトリしてるのすら分かってないワケだからな ここまで頭悪いと話にならない 低学歴知遅れ君ってプロトコルの意味を理解してなさそう TCP Transmission Control Protocol IP Internet Protocol トランスポート層 TCP, UDP, DCCP, SCTP, IL, RUDP 似たような言葉はあるが、その表現は見つからないな 並行宇宙のどこかで使っているかもしれないが ここではなさそうだ あー。TCPというのはHTTPよりもう少し下層に位置する概念ってことかな?(合ってるか不安) 俺が作りたいなぁと思ったのは $ xxx 'example.com' とやるとブラウザでexample.comにアクセスして「ページのソースを表示する」機能を使ったときのような出力を返すコマンド。 これはTCPクライアントじゃなくてHTTPクライアントか。 >>577 そう 普通はHTTPプロトコルのGETメソッド使う POSTでも良いが、設定が多少複雑になる 「トランスファープロトコル」は星の数ほどある「〜転送プロトコル」の用語として使われるけど、トランスファープロトコル単体で使用されてるのは聞いたことないね。 きっとトランスポートプロトコルの間違い。 >>577 まあGETするだけだったらそれこそTCPだけでもいい。 勉強としては、HTTPサーバにtelnetしてGETコマンド(と、いくつかのヘッダ)を打ち込んでみると、イメージがつかめるのではないかと。 半角久しぶりに来てんじゃん やっぱお前が釣らなきゃ盛り上がらんな 勉強したいならCで スティーブンス本で検索すれば、役に立つ書籍があるよ 使いたいだけならpostmanとかcurlでえんじゃね? 半角くんとかvoidくんとかこのスレには個性的な人が多いねw すみません、C言語出テキストファイルの特定行を書き換えたいのですが 全て配列に読み込む→変更する→全て書き戻す という方向しかないでしょうか。 変更前 01.txt a=1 b=1 c=1 変更後 01.txt a=1 b=0 c=1 こういった変更を行いたいです。 標準入力から1行ずつひたすら読み込む 特定行以外をひたすら同じ内容を標準出力に出力する 特定行だけ変更内容を標準出力に出力する できた aho.sh ---- #!/bin/bash aho < 01.txt > 01_tmp.txt mv -f 01_tmp.txt 01.txt 引数でファイル名を指定するどうでもいいことがどうしてもしたい場合は 一旦、プログラムでテンポラリファイルに書きだして プログラムで最後にmvする必要がある >>588 その例みたいにサイズが変わらないなら直接書き換えることは可能 >>588 そういうのはC言語ではやらないのが正解な。 どうせ逆ギレされると思うが、そう言われたことだけでも覚えておけ。 >>588 UNIXならmmap()、WindowsならCreateFileMapping()を使ってファイルの内容をメモリにマップするとか。 書いてあることをすべてCでやりたいなら コレでいける ぜんぶメモリにいれる必要はない @ 入力ファイル(01.txt)をリードオンリーでオープン A テンポラリファイル(出力ファイル)をmktemp()で取得 B Aで取得した出力ファイルをライトオンリーでオープン C 1行ずつ読み込んで1行ずつ書きこみ(>>591 ) D 入力ファイルと出力ファイルをクローズ E 入力ファイルをremove()で削除 F 出力ファイルをrename()で入力ファイルに移動 ものすごい大きいファイルが入力ファイルになった場合対応できない オフセットズレが発生するファイルの更新はファイルの全面書き出し以外に方法はない ファイル後ろの方だと大きなファイルでも部分的な書き直しで済むんだよね 皆さん回答ありがとうございました。 やはり処理的にはすべて触らないとダメそうですね。 >>591 さんの例はfopenとか必要ないのですか。 >>601 ファイル入出力ストリームなら必要 あの例は標準入出力を指定してるだけ すべて触る必要があるかはデータ構造次第 更新するデータ域をブロック分割、 ブロックマップをメタ管理とかは バイナリなら一般的な手法 テキストだとスペースパディングで ブロックやエントリ管理できそうだが そんなことやってる奴は見たことない >>601 stdin から読むようになってるからシェルのコマンドラインからならリダイレクトで読ませれば良いだけだよ。 cat 01.txt | sed s/b=1/b=0/ >>594 スタートアップから渡される argc, argv を「使わない」のだから void なしが妥当なのでは? >>602 × なんとなく ○ ほぼ確実に 「Cで」「Cで」「Cで」、初心者はCしか出来ないからそれしか考えられない。(選択肢がない) 初心者あるあるだけども。 実際これ、Cで処理されてCバイナリを引き継がされても大迷惑だし。 >>588 マジな話、上司が居るのなら上司に聞けって。これ、Cでやったら大迷惑な話だし。 聞くのが迷惑だと思っているのなら、この件については聞かない(報告しない)ほうが迷惑だ。 上司が居なくてど初心者なら、この際にスクリプト言語を覚えろ。 >>606 その論法でいうならvoidなし&返却値なしだな 純K&Rスタイル main() { /* do something */ exit(0); } 例の半角野郎がまた湧いたか、しつけーな 何が上司だ、ここはム板だぼけ >>606 引数 void って初めて見たぞ。文法的にありなのかこれ? 未だ許されないvoidおじ 特定行の書き換えですが ・bの値を反転させたい(0なら1、1なら0) ・b=の行は複数出現する可能性がある() ・複数出現した場合は一番最後に出現した行の値を反転の対象にしたい ・書き換え後はb=の行は1行だけにしたい ・書き換え後はできれば a=... b=... c=... な感じでソートしててほしい これはC言語で出来ますか? どうやったらいいでしょうか? >>612 「出来る/出来ない」なら、そりゃC言語で「出来ない」って事ははほぼ全ての事例で無いよ。 どうやったらいいか、なら、その場合は俺ならExcel使うね。規模的に無理ならシェルスクリプトを使う。 何でもCでやればいいわけではない。 そのお題を実際にCでやる事なんて無いから、練習用なら意味無いし、 本番としてそれをCでやる気なら、間違ってるから止めとけ。 >>588 の続きなのか >>612 ソートするなら全て読み出すのが一番楽だよ コードの書き方みたいなこんなもんを上司に聞けとか よくわからんが、協力会社で入ってるリーダーかなんかか。。。 すげえな、そういった会社の文化をオレは知らないが そもそもそんなとこが未教育なゴミつれてきたら大問題だからな 必死になるのも分かるわ で、だれでもすぐ分かってるコマンド書いてドヤ顔して低学歴もいるしな この程度ならCで書いても 普通にCで書く練習になる Excelで手作業とかは論外です シェル芸でもいいです 誰かできませんか? >>617 どこまで書いたのか、現状のコードを貼ってみなよ >>617 お前以外のみんな出来るっての。 お前がコードクレクレ君だからみんな適当にあしらってる。 お前が努力してる(=コードを試しに書いてみたが動かない)のなら、もう少しましな回答も出るだろうさ。 こんな感じでどうかな ・空行はそのまま出力されてしまう ・代入文は1行に1文のみで X=n の形式 が前提だけど awk -F= '{if($1=="b") b=$2; else print;} END{printf("b=%d\n", xor(b, 1))}' a | sort -u >>621 tacで逆順出力、sedで初回マッチのみ置換、sortでソート出力 tac なんてコマンドがあるんだな、サンキュー sed 使った場合、0と1の交換と、初回マッチ分以外は出力しないようにするの、難しくない? Ruby で作った text = File.read 'data.txt' ary = [ ]; index = [ ] text.each_line.with_index do | line, idx | # 各行・添字 line.chomp! # 末尾の改行を削除する ary.push line # 各行を配列に入れる # 先頭文字列が、b= なら、添字を配列に入れる index.push idx if line.start_with? 'b=' end return if index.empty? # 空配列なら処理なし first = true # 最初の1回だけ処理する index.reverse!.each do | num | # 後ろから削除するために、反転する if first # 最初の1回だけ first = false case ary[ num ][ 2 ] # 3文字目 when "0" then ary[ num ][ 2 ] = "1" when "1" then ary[ num ][ 2 ] = "0" else # 処理なし end else # 2回目以降は削除する ary.delete_at num end end puts ary Rubyもいいけど、こういう小規模な操作にはシェルスクリプトとかが適してる気がする。 >>612 の内容だけど、誰も聞かないのであえて聞くけど b=以外は何も加工せずに複数あればそのまま出力で良いのか? その場合、ソートは=の右側の数値順にするのか、文字コード順にするのかか データによっては、a=、c=、d=の行が多数出力される中でb=の行だけ1行になる ってことで良いのかな? 私たち日本人の、日本国憲法を改正しましょう。 総ム省の、『憲法改正國民投票法』、でググって みてください。拡散も含め、お願い致します。 @ [出力A] a=とc=を抽出(使うコマンド:grep) A [出力B] b=0の1〜末尾-1行を抽出 (使うコマンド:grep|head) B [出力C] b=1の1〜末尾-1行を抽出 (使うコマンド:grep|head) C [出力D] b=0の末尾行を抽出し置換 (使うコマンド:grep|tail|sed) D [出力E] b=1の末尾行を抽出し置換 (使うコマンド:grep|tail|sed) E [出力F] [出力B]、[出力E]、[出力C]、[出力D]コンカチネーションしユニークにする (使うコマンド:cat|uniq) F 出力結果 [出力A]と[出力F]をコンカチネーションしソート(使うコマンド:cat|sort) とりあえずコレでいけるハズ あとはがんばりなさい だけでやるとはオレは一言もいってない 使うコマンドを限定した覚えはない ソートはa,b,c...順です b=以外は重複を許可します(ソート後の出現順は考慮しなくてよい) (処理例 入力データ c=0 a=1 b=1 c=1 a=0 b=0 出力データ a=1 a=0 b=1 c=0 c=1 チューリングマシンならなんでもできて当たり前なんや Cのプリプロセッサも計算完備だしな。誰かがcppでフィボナッチ数列出力してたな そういや こんなんではどうかな sed -e ":l; N; s/\nb=[01]\n/\n/1; $p; b l" 01.txt | sed -e "/b=1/{;s/b=1/b=x0/;};/b=0/{;s/b=0/b=x1/;};/b=x/{;s/x//;}" bが1行しかないとうまく行かないな ちょっと手直し sed -e ":l; N; /b=.*b=/{;s/\nb=[01]\n/\n/1;}; $p; b l" 01.txt | sed -e "/b=1/{;s/b=1/b=x0/;};/b=0/{;s/b=0/b=x1/;};/b=x/{;s/x//;}" 並び替えはsortでやってください 大したことはしてませんw 前半のスクリプトで最終行以外のb=の行を削除し、 後半のスクリプトで置き換えをしてます つかさ、丸投げに答えてやる必要も無いだろ。 ただの一行もコード書いてないだろこいつ。 622じゃだめなんか? cat <file> | awk -F= '{if($1=="b") b=$2; else print;} END{printf("b=%d\n", xor(b, 1))}' | sort てか、Cのスレで質問者もCでどうやるか聞いてるのに誰もCで答えてないw ま、Cで書く気が失せる問題ではあるが。 頭の体操にはなったろ スレを活性化するためには呼び水って必要なんだと実感 C言語でやるとしたら b=で始まる行以外は適当な一時ファイルに出力し b=で始まる行だけはメモリー上に格納しておく b=行が出現する度に、あたらしい行データでメモリー上を更新する EOFまで処理したら、一時ファイルとメモリー上のデータをマージする その際にb=の値を所定の値に置換する 順番は後にソートする前提なので適当で構わない ソートは外部コマンドでやらせて良いだろうね >>645 591がCで答えてるだろ ちょっと小馬鹿にしたような内容だが 小出し小出しで来る質問者には適切だったと だんだん思えてきてる お前らがほどよく食いつきそうな質問考えるのも大変なんだぞ 流石に591はネタとしか思えない というか、酷すぎだろう C99時代のhello worldプログラムを考えてみた。 #include <stdio.h> #include <stdlib.h> static inline void print_hello(void) { puts("Hello, C!"); } int main(void) { print_hello(); exit(EXIT_SUCCESS); } exit()関数を使ったり、main()関数の中に直に処理を書かないとか色々。 なんだこれ?引数 void って初めて見たぞ。文法的にありなのかこれ? >>653 あれ?それ、コンパイルすると警告出ないか?main()が何も返してないって。 いや、exit()を理解してくれるコンパイラなら何も出ないかも知れないけどね。 >>655 c99 -O2 -Wall -Werror -Wextra hello.c -o hello これで無警告だった。 c99はGNU/Linuxだとgcc -std=c99を実行してる。 icc -std=c99 -O2 -Wall -Werror -Wextra hello.c -o hello でも成功。 GNUのコンパイラでもIntelのコンパイラでもちゃんと処理できるのでいいんじゃないかなぁ。 ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる