プログラミング

参考

目次

下位ページ

  • このページに下位ページは存在させない。全てC++に押し付ける。

mmap

  • 参考
  • 機能:ファイルとメモリの同一視(仮想メモリ技術)
    • 読み込み専用なら,メモリから読み出しがそのままファイル読み出しに相当.
    • 書き込み専用なら,メモリへの書き込みがそのままファイル書き込みに相当.
  • メリット
    • カーネルとコピープログラムの間でデータのコピーが発生しないので,高速.
    • iostreamなんて使うよりはよほど早い.

printfのバッファクリア

  • printfが表示されないときに
#include <stdio.h>
#include <stdlib.h>
int main(void)
   for (i = 0 ; i < 3; i++) {
       printf("*");
       fflush(stdout);
       sleep(1);
   }
}

void*のoffset

#include <stdio.h>

int main(void)
{
        void* a = (char*)0x01;
        a = (void*)((char*)a + 0x0F);
        printf("%p\n", a);
}

non-blocking read

  • readでO_NONBLOCKよりも,selectでread可能かどうかを見る方がまとも
    • RDWRで開けるので,non-blockingしながらwriteもできるので
  • man select

低位関数のエラー

  • errnoに出力される
  • 表示の方法
    • perror(問答無用で標準出力に出てしまう)
    • strerror(char*となるので,その後どうにかできる)

日付からUNIX TIMEを得る

#include <ctime>
#include <cstdio>
#include <cmath>

int main(void)
{
    int y = 2015;
    int m = 5;
    struct tm t;
    time_t timer;
    timer = mktime(&t);
    for (int d = 3; d < 30; d++) {
        t.tm_year = y - 1900;
        t.tm_mon = m - 1;
        t.tm_mday = d;
        t.tm_hour = t.tm_min = t.tm_sec = 0;
        timer = mktime(&t);
        printf("%d %d (%ld)\n", d, (int)round((double)timer/60/60/24), timer);
    }
}

ブラウジング

  • curlとlibxmlを使う.
  • ログイン情報は,httpクッキー情報を付記する必要がある(超面倒)

sprintfの型は非常に厳密

  • sprintfの型は非常に厳密で,1と1.0の違いで数字化けを起こすので要注意

文字列検索と文字列分解

  • "1:100H2"もしくは"1:100"が入力の文字列ttargから100と2を抽出するかっこいい方法
char* s = "1:100H2";

double r0, Rh;
char* colon;
if((colon = strstr(s, ":")) != 0)
    if(strstr(colon+1, "H") != 0)
        sscanf(colon+1, "%lfH%lf", &r0, &RH);
    else
        sscanf(colon+1, "%lf", &r0);

数学関数の速度

  • sin, cosは四則演算20個に相当

inline

  • inlineは適当な深さまで展開して、きついところはそのままにする
  • ループアンローリングみたいなことをやってる

演算子の優先順位

  • 評価順序が規定されているのは、論理演算子 (&& ||)、カンマ演算子、条件演算子だけ

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2022-07-18 (月) 03:01:15 (641d)