2012年05月09日
C言語 scandir() 日付でsort
scandir()でファイル作成順でリストするサンプル(自分メモ)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <dirent.h>
#include <sys/stat.h>
char gTgtDir[256];
int DotOmit(const struct dirent *pDe);
int TimeSort(const void *v1, const void *v2);
int main(int ac, char *av[])
{
int Cnt ;
struct dirent **pDe ;
int idx ;
if (ac != 2) {
fprintf(stderr, "Usage : %s TargetDir\n\n", av[0]);
return 1 ;
}
strcpy(gTgtDir, av[1]);
if (gTgtDir[strlen(gTgtDir)-1] != '/') {
fprintf(stderr, "directoryの末尾に/を付けて下さい。\n\n");
return 1 ;
}
Cnt = scandir(gTgtDir, &pDe, DotOmit, TimeSort);
if (Cnt == -1) {
perror("scandir ");
return -1 ;
}
for (idx = 0 ; idx < Cnt ; idx++) {
printf("No%4d : %s\n", idx+1, pDe[idx]->d_name);
free(pDe[idx]);
}
free(pDe);
return 0 ;
}
int DotOmit(const struct dirent *pDe)
{
if (strcmp(pDe->d_name, "." ) && // "."でない
strcmp(pDe->d_name, "..")) { // かつ".."でもない
return 1 ;
}
return 0 ;
}
int TimeSort(const void *v1, const void *v2)
{
struct dirent *d1, *d2 ;
struct stat s1, s2 ;
char FNm[256];
d1 = *(struct dirent **)v1 ;
d2 = *(struct dirent **)v2 ;
strcpy(FNm, gTgtDir);
strcat(FNm, d1->d_name);
stat (FNm, &s1);
strcpy(FNm, gTgtDir);
strcat(FNm, d2->d_name);
stat (FNm, &s2);
// return (int)(s1.st_mtime - s2.st_mtime) ; // 古い順の場合
return (int)(s2.st_mtime - s1.st_mtime) ; // 新しい順の場合
}
簡単な動確しかしてないのでバグがあるかも。。。
後、ファイルが多いと遅い。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <dirent.h>
#include <sys/stat.h>
char gTgtDir[256];
int DotOmit(const struct dirent *pDe);
int TimeSort(const void *v1, const void *v2);
int main(int ac, char *av[])
{
int Cnt ;
struct dirent **pDe ;
int idx ;
if (ac != 2) {
fprintf(stderr, "Usage : %s TargetDir\n\n", av[0]);
return 1 ;
}
strcpy(gTgtDir, av[1]);
if (gTgtDir[strlen(gTgtDir)-1] != '/') {
fprintf(stderr, "directoryの末尾に/を付けて下さい。\n\n");
return 1 ;
}
Cnt = scandir(gTgtDir, &pDe, DotOmit, TimeSort);
if (Cnt == -1) {
perror("scandir ");
return -1 ;
}
for (idx = 0 ; idx < Cnt ; idx++) {
printf("No%4d : %s\n", idx+1, pDe[idx]->d_name);
free(pDe[idx]);
}
free(pDe);
return 0 ;
}
int DotOmit(const struct dirent *pDe)
{
if (strcmp(pDe->d_name, "." ) && // "."でない
strcmp(pDe->d_name, "..")) { // かつ".."でもない
return 1 ;
}
return 0 ;
}
int TimeSort(const void *v1, const void *v2)
{
struct dirent *d1, *d2 ;
struct stat s1, s2 ;
char FNm[256];
d1 = *(struct dirent **)v1 ;
d2 = *(struct dirent **)v2 ;
strcpy(FNm, gTgtDir);
strcat(FNm, d1->d_name);
stat (FNm, &s1);
strcpy(FNm, gTgtDir);
strcat(FNm, d2->d_name);
stat (FNm, &s2);
// return (int)(s1.st_mtime - s2.st_mtime) ; // 古い順の場合
return (int)(s2.st_mtime - s1.st_mtime) ; // 新しい順の場合
}
簡単な動確しかしてないのでバグがあるかも。。。
後、ファイルが多いと遅い。
2011年07月19日
Linux プログラムからtabを除く
仕事でプログラムを作っているが、お客様によってはtab禁止って言う所もある。
って指示を受けていても、癖で入れちゃう。
【探し方】
[hoge@host1 $] grep -c $'\t' *.c
※個数を表示
【置換え】
vimで対象ソースを開きvimコマンドで以下入力
「:set expandtab」←既にexpandtabなら不要
「:retab」
プログラムファイル数が多い場合はめんどう。 orz...
(コマンドで対応できると思うけど、自分の作業は上記で十分だったので・・・)
って指示を受けていても、癖で入れちゃう。
【探し方】
[hoge@host1 $] grep -c $'\t' *.c
※個数を表示
【置換え】
vimで対象ソースを開きvimコマンドで以下入力
「:set expandtab」←既にexpandtabなら不要
「:retab」
プログラムファイル数が多い場合はめんどう。 orz...
(コマンドで対応できると思うけど、自分の作業は上記で十分だったので・・・)
2010年04月23日
Linux プログラムで端末の幅・高さを取得する。
#include <sys/ioctl.h>
#include <unistd.h>
int main(void)
{
struct winsize tWSz ;
// サイズの取得
ioctl(STDOUT_FILENO, TIOCGWINSZ, &tWSz);
printf("端末の幅 =%d\n", tWSz.ws_col);
printf("端末の高さ=%d\n", tWSz.ws_row);
// サイズの設定
tWSz.ws_col = 80 ;
tWSz.ws_row = 25 ;
ioctl(STDOUT_FILENO, TIOCSWINSZ, &tWSz);
}
サイズ設定は見た目のサイズが変る訳ではない。論理的なサイズが変るだけ…
備忘録
#include <unistd.h>
int main(void)
{
struct winsize tWSz ;
// サイズの取得
ioctl(STDOUT_FILENO, TIOCGWINSZ, &tWSz);
printf("端末の幅 =%d\n", tWSz.ws_col);
printf("端末の高さ=%d\n", tWSz.ws_row);
// サイズの設定
tWSz.ws_col = 80 ;
tWSz.ws_row = 25 ;
ioctl(STDOUT_FILENO, TIOCSWINSZ, &tWSz);
}
サイズ設定は見た目のサイズが変る訳ではない。論理的なサイズが変るだけ…
備忘録
2009年12月01日
gccで 「リンクが完了しなかったの~」とエラーになったら。
gccで
「リンクが完了しなかったのでリンカの入力ファイルは使われませんでした。」
と言うリンクエラーが出たら…
大抵は、gccの-lオプションの指定がまずい。
×gcc -lrt -o hoge hoge.c
○gcc hoge.c -o hoge -lrt
備忘録
「リンクが完了しなかったのでリンカの入力ファイルは使われませんでした。」
と言うリンクエラーが出たら…
大抵は、gccの-lオプションの指定がまずい。
×gcc -lrt -o hoge hoge.c
○gcc hoge.c -o hoge -lrt
備忘録