标题: 编程开发版精华FAQ

版主
Rank: 7Rank: 7Rank: 7
版主


UID 5
精华 4
积分 0(积分有什么用?)
帖子 3325
阅读权限 100
注册 2000-7-30
来自 ConeosBraintel. Matrix
状态 离线
发表于 2001-8-11 20:34  资料  个人空间  主页 短消息  加为好友  ICQ 状态
? 在RH7.1下安装Kylix会有error -10的错误,问题可能是出在RPM 4.0.2-8上。
b0C3_3_md/D]
cLinux伊甸园论坛
! 我发现可以有两个方法解决: www.linuxeden.com)Pc:Y}8b7O:p
  1、ftp://ftp.rpm.org/pub/rpm/test-4.0.3/下载rpm 4.0.3+ www.linuxeden.comm%kJlj+e
  2、比较简单,只要避开root自动运行rpm的步骤就行了, www.linuxeden.comt,e$u2q*X
     sh setup.sh -m 安装即可
1[ga,NO!n/{
Qwww.linuxeden.com

Lq/^{
{2LK
? 我下载了kylixft4.iso文件(600多M),用IOSBUSTERRS打开刻盘后,安装时老告诉我glibc版本不够高。我升级glibc到2.1.3或者是2.2 但他还是检测glibc到版本不够高。请问是怎么回事。有什么办法解决吗?
W0?tI&X n7Gn,_4FLinux伊甸园论坛! 你安装Red Hat7.1, 再创建一个用户, 然后以这个用户登录linux(非root就行), 再安装kylix, 定不会再有问题!!!OK!!!
/hw_^oOitg\7{d3E0p
? 请编程高手指教
qG yV
ELinux伊甸园论坛
我在学unix进程间通信----SYSTEM V消息队列的时候遇到如下问题 Linux伊甸园论坛'{RYc[7v)g
[root@localhost svmsg]# make &q
R@        k4w1n4X? zg

gcc -g -O2 -D_REENTRANT -Wall -c -o ctl.o ctl.c www.linuxeden.com)aa|Yk:q
www.linuxeden.com.UR
u-seq:`A

ctl.c: In function `main':
.G1mB~ ltXwww.linuxeden.comctl.c:8: storage size of `buf' isn't known ` qBF{ES
ctl.c:10: `MSG_R' undeclared (first use in this function)
[{5hWT.W)h U)hctl.c:10: (Each undeclared identifier is reported only once
/t4ti w \ctl.c:10: for each function it appears in.)
'a9r(r2MD
x]Linux伊甸园论坛
ctl.c:10: `MSG_W' undeclared (first use in this function)
.F4a-EgCO~ctl.c:18: `ulong_t' undeclared (first use in this function) :a(l"mD-GduS"r

1pfz0f;q(`N.v8^}3[{9F!q
下面是ctl.c文件
"l#V8w2W,tK l-n$k1LoLinux伊甸园论坛#include "unpipc.h" w
u'FLP0@/en;ZCP

0l RAiM(]/?\Ue
int
cTT,V        Tmain(int argc, char **argv)
l zr'l(s8pafKXNvVwww.linuxeden.com{
`;X+}U1LOint msqid;
O4L
\X:Ou6[Linux伊甸园论坛
struct msqid_ds info; @7uE
qyuU1in

struct msgbuf buf;/*问题所在处*/
7]Gr6|b
^"WLinux伊甸园论坛

]7?+RvE$H7x!pmsqid = Msgget(IPC_PRIVATE, SVMSG_MODE | IPC_CREAT);/*问题所在处*/ b0aa'J        f

al$A:|8Z,k,N7n
]r        mH-G[Linux伊甸园论坛/*other code*/
t0d$KR-O0} h9xo}
~ H5Z5W'm3k(Qwww.linuxeden.com9}4_V%n7TrV
@D*p8bGR1}
下面是unpipc.h文件节选

bp#rw:c9n%^b*J'yLinux伊甸园论坛
#ifdef HAVE_SYS_MSG_H Linux伊甸园论坛t6a0\8sV2G(j
# include <sys/msg.h> /* System V message queues */ Linux伊甸园论坛Z j/\yo'rc4h;~-w$z
#endif
.e~B%WVk0C6IULinux伊甸园论坛
7^Zc]1a/]a&gLinux伊甸园论坛8z
x#C~U?Aj

#define SVMSG_MODE (MSG_R | MSG_W | MSG_R>>3 | MSG_R>>6)/*问题所在处*/
_-U5en,dq+M/* default permissions for new SV message queues */
fI
U%DaM7r0U
/* $$.ix [SVMSG_MODE]~constant,~definition~of$$ */
-XZ2G1E9l JPA$^8k3O
}ma

Linux伊甸园论坛tU Y,g!L&ySLR3k9G;_
下面是<sys/msg.h>文件 #\*[] Za
#ifdef __USE_GNU
k"h6i-_4FW,tm3RLinux伊甸园论坛/* Template for struct to be used as argument for `msgsnd' and `msgrcv'. */
c5v qvGt6Ostruct msgbuf www.linuxeden.comG6s@9V HY1j*s R
{ www.linuxeden.com6O8d        Cw3lJ6j
long int mtype; /* type of received/sent message */
G\Z1_\1VLinux伊甸园论坛char mtext[1]; /* text of the message */ www.linuxeden.com!V T5g e:h
At;k.vR

};
L5epx4FE;X[)W0F#endif
i
iq-r;u&Y%dty

U%R{ D        B2oy,MLinux伊甸园论坛请各大虾多多指教!!(我用的是linux7.0) 4\2P{{
z&W


0m$h^\&K*@3cB@! 可以用O_RDWD 替换程序中的MSG_R||MSG_W(具体含义说明请参照<sys/fcntl.>说明;
!w"zO
V6s\jswww.linuxeden.com
用ulong 替换程序中的ulong_t(或在<sys/types.h>增加ulong_t的说明.
%twgQC
~AnC8EwVLinux伊甸园论坛www.linuxeden.com!q8Qs&k/qj A
T

? 我试着用gcc写一个父子进程:
u6tJ"Ac xwww.linuxeden.comif (fork()==0) 1u Ro\i&uK
{        w

{ while (1) ,|4s9WBvCey
{ printf("A ");
(c;lRO
yn7Ywww.linuxeden.com
sleep(1); +w!kF!To_Dt
} 8GA I(eW{S5L.I
}else www.linuxeden.comw^*jjP
while (1) .T+S:b V9f3l
{ printf("B ");
ToX z)cP.nDynzsleep(1); fZp uQ&Bm
_

}
](djl
cb3Q4D,ZV
}
4dN.OT:H'{_-~x,Z可是不能打印A、B。注释掉sleep,可以打印         gt1r-N1lW_4k
请教各位何解? a3],Lh8d0ZV0s

5}0jc-Q!dWLinux伊甸园论坛! 你加上\r\n看看!
U$~AT S0w1} \1p(I'i9G%Za8](U0YH1WO
! that can not make sure that two process run simultaneously.
C3x2kq?(D5`&UhLinux伊甸园论坛you should use signal to communicate between parent and child process to work cooperately. C
z$`9oH8l

man 3 getppid b        Xgxgg
man 3 kill
GPhT)k*L[+yvnman 3 signal*k0A#{FhL6E%~
!A nax8bIUz
[已被 DarkSpy 编辑过, 在 2001-09-20  08:21]





-----------------------------------------
耶稣说:「谁若知道世界,便是发现了一具躯壳;谁若发现了一具躯壳,对那人来说,世界不值得甚麼。」
              ----(圣经次经: 多玛福音:56)
顶部
lxvfeng
新生入学
Rank: 1
注册用户



UID 30112
精华 0
积分 0(积分有什么用?)
帖子 1
阅读权限 10
注册 2002-11-12
状态 离线
发表于 2002-11-12 11:09  资料  个人空间  短消息  加为好友 
(回应)

可以将函数改写成msgget(IPC_PRIVATE,IPC_CREAT | 0660)

顶部
ykwj121
实习记者
Rank: 5Rank: 5
注册用户



UID 9756
精华 0
积分 0(积分有什么用?)
帖子 793
阅读权限 10
注册 2002-1-29
来自 -)
状态 离线
发表于 2002-12-31 10:29  资料  个人空间  短消息  加为好友 
编程问题FAQ

Q: 为什么我用 gcc 编译出来的 a.out 不能执行?
\oNn)M
jz%r'c]Linux伊甸园论坛
我编辑了一个 test.c 并用 gcc 编译, 生成一个 a.out 文件 Linux伊甸园论坛:p+?${d$Dn!t'@
E

但是为什么它不能执行?
F1U        ~Y(g7@0y+@Linux伊甸园论坛
o%j/SXl+c{? BX

A: 在 Linux 下执行程序需要指定文件路径。 请试试 ./a.out 'rS i)Nj2rz        w([H!X+d
这里用 ./ 告诉 shell 要执行的程序在当前目录。 www.linuxeden.com6pI8jdT~$r`H
当然如果环境变量 PATH 中包含了路径, 则可以不用这样指定。 'w9rp4p r
可以通过设置用户配置文件改变它。 n} ltz4f%Yx
如果是bsh, ksh, bash:
%^A Nn~i:x0Hovi ~/.bashrc #vEh8v7L)c
添加一行: 5S$WPl3P ^#_
PATH=$PATH:.
hE.Q2B1|~jwww.linuxeden.com如果是csh, tcsh:
8r0`\xQ*eJS%avi ~/.cshrc
K*cZ9P0IgLinux伊甸园论坛添加一行:
/~%\e i]8a@setenv PATH $PATH:. 7g@9G$~x#a\ A/y
这样下次等录就可以直接执行当前目录的程序了。
)C2crV
kpHP

W/Z5E5J)ib*_9}&GQ: 编程问题: 如何在 Linux 中得到特殊键的扫描码?
&kGrG        `bwww.linuxeden.com在 DOS 下面可以通过 INT86 函数进行系统调用来得到方向键的码。 },Se
~(@M,u e

但是在 UNIX 下用 GCC 的什么函数可以读入方向键,
#zrzZt$?3fwww.linuxeden.com又是用什么函数来输出一个方向键呢?
!h)Z;i}]kV]www.linuxeden.com
%`TNDChV4gA: A: there is structure kbentry defined in /usr/include/linux/kd.h
6jZ~J
Kx0X

#m/zEs/a@8[+]www.linuxeden.comand,u can find definitions of the structure’s members in )Hc5R9Sb(M.SQc
Linux伊甸园论坛L!Dv.aT!J
/usr/include/linux/keyboard.h,
E|~Z5? @bR!C9a)I7S!WLinux伊甸园论坛Linux伊甸园论坛^4tPnH5U
then use ioctl() to set the keymap,and read() to read the Linux伊甸园论坛-Qb&pHEO0u,w7K

.b-h@Er}value retured when a key being pressed. N0lPo } m1qs.n1\
www.linuxeden.com,b!cjN+]$K-bU
Q: 编程问题: 关于文件结束的判断偶要对一个log文件进行分析,通过下面的方法打开
yX1L9RxY#Z1hb*Tif ((fp=fopen(free,"r+"))==NULL){ //the free ip file created by manual printf("can’t open file %s.",free);
CtZ9N)f%Sy1w5qLinux伊甸园论坛putchar(’\n’);
}EgF Vexit(0); D_        Ln1@
} D/Ks&I| W
通过fgets函数从fp流中取出字符串验证,正确! $c\+t8~(}        I]3T
但当偶用while(fgetc(fp)!=EOF){}进行提取分析时,却发生 !Z[,z%n3^{1kWM0Dr4y
"Segmentation fault"错误! ,JJ#rV.m;X/s*BE y
呜呼!为什么????? Linux伊甸园论坛4D V
OQ&S^_3G;|

2Y
n iT$Bq;d7a

A: "Segmentation fault"错误!
.dd6d5kg`
i
~~~~~~~~~~~~~~~~~~~ 这种错误是因为指针为空。
        Tu,E~T        W/\0QLinux伊甸园论坛而且用EOF作为文件结束的标志不太好,可能文件结束了还是!=EOF。
nu-{0d,f7Cwww.linuxeden.comwww.linuxeden.com#XA0H8~l"E D"B3D0y
Try to use:
2kH9^-Bi&M/uwhile(!feof(fp)) { !U/A(@#jZ,k5I
fgetc(fp);
8E;gX$M9tX&^        o8b}
,ZT+h4]a+M[#G9\6KK试试看。

顶部
faraway
实习记者
Rank: 5Rank: 5
注册用户



UID 15156
精华 0
积分 0(积分有什么用?)
帖子 675
阅读权限 10
注册 2002-5-10
来自 深圳
状态 离线
发表于 2002-12-31 13:41  资料  个人空间  短消息  加为好友 
Q: gcc -o hello hello.c之后,在用gdb进行调试时,用list或break为何不行?
3b~0S
y0T8r?q.s

8d&q-y]x        Q5oE*eA: 在编译的时候加-g选项,如:gcc -o hello -g hello.c. p+v C8J5F0e

n,S3N,^?&Q,D+tQ: 如何跟踪子进程?
G|M"t;Rh9|4a+}+L8]3["X9w$L5PW:f;A
A: 可在子进程中设置sleep,然后可用attach pid对子进程进行跟踪。多个子进程则可多开几个gdb分别attach然后跟踪.
s I#v"|k!M

ii-t*t3_F:_
更多的关于gcc和gdb的使用方法可到www.gnu.orgQ&C9DNbtt
的Online Document获得。





class faraway : public GNU { public: faraway() : _M_name("faraway"), _M_sex("Male"), _M_age(26) { } ~faraway(); private: std::string _M_name; std::string _M_sex; unsigned long _M_age; };
顶部
不容错过的IBM 集群技术资源汇总
faraway
实习记者
Rank: 5Rank: 5
注册用户



UID 15156
精华 0
积分 0(积分有什么用?)
帖子 675
阅读权限 10
注册 2002-5-10
来自 深圳
状态 离线
发表于 2002-12-31 13:55  资料  个人空间  短消息  加为好友 
Q: linux下都有哪些C/C++开发工具?www.linuxeden.com
wT2d)L!t;?H


-|R`/@k[A: 比较经典的编辑工具有vi、emacs等,她们有命令行版和图形版。编译工具有gcc,调试工具有gdb.这些工具一般都会预装。www.linuxeden.comqB6g,I
y.R*w

   GUI的IDE则有Kdevelop、Anjuta等。更多的关于kdevelop的信息可到www.kdevelop.org获得,Anjuta可到http://anjuta.sourceforge.net





class faraway : public GNU { public: faraway() : _M_name("faraway"), _M_sex("Male"), _M_age(26) { } ~faraway(); private: std::string _M_name; std::string _M_sex; unsigned long _M_age; };
顶部
不容错过的IBM 集群技术资源汇总
ykwj121
实习记者
Rank: 5Rank: 5
注册用户



UID 9756
精华 0
积分 0(积分有什么用?)
帖子 793
阅读权限 10
注册 2002-1-29
来自 -)
状态 离线
发表于 2003-1-2 14:46  资料  个人空间  短消息  加为好友 
MAKEFILE简单介绍
+]NN7]*q(X[]什么是make?*@px
g^'a


`
Lv7w%H
    Unix(Linux)是一个天生的开发平台,make是一个强力的工具.它能www.linuxeden.com4Q\#nM4g,?z5^
H

自动跟踪相互依赖的源代码块并组成一程序,使得很容易建立一可执行程序.Make就是这种有依赖关系的部分和代码之间所作的规格说明.-c TyN        {.J

!KAwS8`[] 所有的程序都要使用make?
NU        v3T
`
    是的.尽管你只有几个简单的模块,但你需要有一种结构来支持它从简单走向复杂.除非你的程序已经盖棺定论.
K#C/mCrBT
~D.BSJlLinux伊甸园论坛[]Makefile由哪些组成?
@6|"|8@mTo{Linux伊甸园论坛    Makefile由以下几个部分组成:,poJQH7eXGwWwP
www.linuxeden.com3Vr0w_l*O R)r
    注释.%CzZ1`?p
    ^^^^
){E        PM4Qdp%vLinux伊甸园论坛    使用#符号插入.make将忽略#之后的任何内容以及其后的RETURN键.
q-u5z ~4o2AM`
/Jst(ej2VkLinux伊甸园论坛    变量.
o\(Hz4U:Z        z:Ik$F4e;SLinux伊甸园论坛    ^^^^
5drn p-AWE7JB    make允许定义与SHELL变量类似的有名变量.比如,你定义了SOURCES=prog.c,那么该
&wn|)R
~6]
变量的值$(SCOURES)就包含了源文件名.kHew&| ir&_)B-g
]i2LXW3j-` sg
    依赖关系.
%Vb4u|S;M;ILinux伊甸园论坛    ^^^^^^^^
Jb;Y2r/|z9nv&H7kwww.linuxeden.com    左边是目标模块,后接一冒号.再接与该模块有依赖关系的模块.
(jXX"sg~
,^H2Hjs&awww.linuxeden.com    命令.   
%x\9T3v#q    ^^^^
gQ*c.lqHp"n    以TAB键开始(即使用相同数量的空格也不能代替它).
;sH        R![9g9G'W:Iv.q3Qwc#Z7N
www.linuxeden.comz*O        Az'}9ou
[]Makefile示例
7o5la/H
~9dwww.linuxeden.com
    下面介绍一个简单的示例来说明make的用法.假设你的程序有两个源文件main.c和myLinux伊甸园论坛NDZ        Y'D.?.u9q$p)N
c.c,一个位於子目录include下的头文件myhead.h,一个库由三个源文件myrout1.c,myrouwww.linuxeden.com!e*Q}1S Mh:m
t2.c,myrout3.c产生.YSY0Oq
    其makefile文件为:

    #一个基本的MAKEFILE文件.
    #其中包括个人的头文件和个人库.
    HEADERS=include/myhead.h
    SOURCES=main.c myc.c
    PRODUCT=$(HOME)/bin/tool
    LIB=myrout.a
    LIBSOURES=myrout1.c myrout2.c myrout3.c
    CC=cc
    CFLAGS=-g
    all:$(PRODUCT)
    $(PRODUCT):$(SOURCES)
        $(CC)$(CFLAGS) -o $(PRODUCT)$(SOURCES)
    lint:$(PRODUCT)
        lint $(SOURCES)$(LIBSOURCES)

哈哈,挺象SHELL编程的.如果你与我一样使用LINUX下的gcc,那么只要把上面的CC=cc改为CC=gcc即可.怎么样,想来一个更复杂点的吗?
Z        pN#]7M-r Iwww.linuxeden.com
$R+Fl9l
Y;V!QLinux伊甸园论坛
[]一个更为复杂的Makefile[VXW lS'g,Y+q
    你是否注意到,在上例中,只要启动make,就会重新编译所有源代码.
+D(QF~i6T    如果你能看懂以下的makefile,恭喜恭喜,你通关了.

    #一个更为复杂的makefile
    HEADERS=include/myhead.h
    SOURES=main.c myc.c
    OBJECTS=main.c myc.c
    PRODUCT=$(HOME)/bin/tool
    LIB=myrout.a
    LIBSOURCES=myrout1.c myrout2.c myrout3.c
    LIBOBJECTS=$(LIB)(myrout1.o)$(LIB)(myrout2.o)$(LIB)(myrout3.o)
    INCLUDE=include
    CC=cc
    CFLAGS=-g -Xc
    LINT=lint
    LINTFLAGS=-Xc
    all:$(PRODUCT)
    $(PRODUCT):$(OBJECTS)$(LIB)
        $(CC)(CFLAGS)-o$(PRODUCT)$(OBJECTS)$(LIB)
    .c.o: $(HEADERS)
        $(CC)$(CFLAGS) -c I$(INCLUDE)$<
    $(LIB):$(HEADERS)$(LIBSOURCES)
        $(CC)    $(CFLAGS) -c $(?:.o=.c)
        ar rv $(LIB) $?
        rm $?
    .c.c:;
    lint:    $(PRODUCT)
        $(LINT)$(LINIFLAGS)$(SOURCES)$LIBSOURCES)


顶部
faraway
实习记者
Rank: 5Rank: 5
注册用户



UID 15156
精华 0
积分 0(积分有什么用?)
帖子 675
阅读权限 10
注册 2002-5-10
来自 深圳
状态 离线
发表于 2003-1-20 09:12  资料  个人空间  短消息  加为好友 
Some discussions:[/SIZE]
;zR,f5v"x[
NS)?#NY(U1. Database[/COLOR]
![5Qu7J-Y.i4c![        Twww.linuxeden.com
4l:c%u        n        g Rj9s1). 请教一个关于c++下引用mysql函数的问题4D&OW})_T8}-H2T
http://www.linuxeden.com/forum/s ... &threadid=48093^
Owyu

0~x6K
IKg


T?E/sM6^;fqyO'wwww.linuxeden.com2. 进程[/COLOR] 0s-Z^@7BQ
k


0i;\"l%\+NlE$xmwww.linuxeden.com1).僵尸进程为何不能消除
}9t+l7uB:z#vwww.linuxeden.comhttp://www.linuxeden.com/forum/s ... &threadid=47591
+}]qP1S|&{g]%m'g
3. Network[/COLOR] #?Q9h:E;FK,be2y9j

6x2`w)[zOY1)有人知道linux下如何用c获取本机的mac地址吗
To,V)l'C;r.E ZdLinux伊甸园论坛http://www.linuxeden.com/forum/s ... &threadid=34360





class faraway : public GNU { public: faraway() : _M_name("faraway"), _M_sex("Male"), _M_age(26) { } ~faraway(); private: std::string _M_name; std::string _M_sex; unsigned long _M_age; };
顶部
faraway
实习记者
Rank: 5Rank: 5
注册用户



UID 15156
精华 0
积分 0(积分有什么用?)
帖子 675
阅读权限 10
注册 2002-5-10
来自 深圳
状态 离线
发表于 2003-3-7 14:32  资料  个人空间  短消息  加为好友 
Linux resource:u5Ss a ZGDXRE
|] A8b+P-aJ
www.tldp.org --many linux HOWTOs
        Po6b?NrMz"JC
Tb%Q;}'s0On~lwww.linux.org --many linux HOWTOs
0S"a-eQ'm1KA
g&K Y"?
www.linuxeden.com*szJ        bN;H
www.gnu.org --all GNU tools's online manual,such as gcc,gdb...
@0C!\.\JYmP#@www.linuxeden.comwww.kernelnewbies.org --many documents about linux kernel for newbie





class faraway : public GNU { public: faraway() : _M_name("faraway"), _M_sex("Male"), _M_age(26) { } ~faraway(); private: std::string _M_name; std::string _M_sex; unsigned long _M_age; };
顶部
faraway
实习记者
Rank: 5Rank: 5
注册用户



UID 15156
精华 0
积分 0(积分有什么用?)
帖子 675
阅读权限 10
注册 2002-5-10
来自 深圳
状态 离线
发表于 2003-3-19 14:56  资料  个人空间  短消息  加为好友 
Q:What calls do I use to get the MAC address on a Linux box in a C command line program? (Don't want to parse ifconfig's output))W9v5iI!\7YuI7|
Is there an API call?xDiY/v+~W

\4]@D-k8PMA:Here ya go, enjoy!

/*
* gethwaddr.c
* Author: Ben Menking <bmenking@highstream.net>
*
* Demonstrates retrieving hardware address of adapter using ioctl()
*
*
*/
#include <stdio.h>
#include <sys/ioctl.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <net/if.h>

int main( int argc, char *argv[] )
{
        int s;
        struct ifreq buffer;

        s = socket(PF_INET, SOCK_DGRAM, 0);

        memset(&buffer, 0x00, sizeof(buffer));
       
        strcpy(buffer.ifr_name, "eth0");

        ioctl(s, SIOCGIFHWADDR, &buffer);

        close(s);
       
        for( s = 0; s < 6; s++ )
        {
                printf("%.2X ", (unsigned char)buffer.ifr_hwaddr.sa_data[s]);
        }

        printf("\n");

        return 0;
}






class faraway : public GNU { public: faraway() : _M_name("faraway"), _M_sex("Male"), _M_age(26) { } ~faraway(); private: std::string _M_name; std::string _M_sex; unsigned long _M_age; };
顶部
不容错过的IBM 集群技术资源汇总
faraway
实习记者
Rank: 5Rank: 5
注册用户



UID 15156
精华 0
积分 0(积分有什么用?)
帖子 675
阅读权限 10
注册 2002-5-10
来自 深圳
状态 离线
发表于 2003-5-23 11:34  资料  个人空间  短消息  加为好友 
Q: How to list/read a director by filter and sort?
3Yl\3n8r!oLinux伊甸园论坛
3~y7C!oA!GeMA: a simple way is use scandir(). more information plz man 3 scandir. Here is a sample demo, it will list all files/directors whithin 3 offset __base_dir:

#include <unistd.h>
#include <dirent.h>

int
alphasort(const void* a, const void* b);

int
select(const struct dirent* __dirent)
{
        int __ret =  strcmp(__dirent->d_name, "20030515");
        return __ret > 0 ? 1 : 0;
}
int
select2(const struct dirent* __dirent)
{
        int __ret = strcmp(__dirent->d_name, "..");
        return __ret > 0 ? 1 : 0;
}

int
main(int __argc, char* __argv[])
{
        struct dirent** __namelist;
        struct dirent** __namelist2;
        struct dirent** __namelist3;
        char                   __base_dir[50];// = "/home/faraway/records/";
        char                __my_dir[50];
        char                __my_dir2[50];
        int __n, __m, __i;
       
        if(__argc < 2)
        {
                printf("USAGE: dir path-name\n");
                exit(1);
        }
        sprintf(__base_dir, "%s", __argv[1]);
        __n = scandir(__base_dir, &__namelist, select, alphasort);
        if(__n < 0)
        {
                perror("scandir");
                exit(1);
        }
        else
        {
                while(__n--)
                {
                        printf("%s\n", __namelist[__n]->d_name);
                        sprintf(__my_dir, "%s/%s", __base_dir, __namelist[__n]->d_name);
                        __m = scandir(__my_dir, &__namelist2, select2, alphasort);
                        if(__m < 0)
                        {
                                perror("scandir");
                        }
                        else
                        {
                                while(__m--)
                                {
                                        printf("        %s\n", __namelist2[__m]->d_name);
                                        sprintf(__my_dir2,"%s/%s",  __my_dir, __namelist2[__m]->d_name);
                                        __i = scandir(__my_dir2, &__namelist3, select2, alphasort);
                                       if(__i > 0)
                                       {
                                                while(__i--)
                                                {
                                                        printf("                %s\n", __namelist3[__i]->d_name);
                                                        free(__namelist3[__i]);
                                                }
                                                free(__namelist3);
                                       }               
                                        free(__namelist2[__m]);
                                }
                                free(__namelist2);
                        }       
                        free(__namelist[__n]);
                }
                free(__namelist);
        }
}






class faraway : public GNU { public: faraway() : _M_name("faraway"), _M_sex("Male"), _M_age(26) { } ~faraway(); private: std::string _M_name; std::string _M_sex; unsigned long _M_age; };
顶部
 



当前时区 GMT+8, 现在时间是 2008-5-19 00:49

    Powered by Discuz! 5.5.0  © 2001-2007 Comsenz Inc.
Processed in 0.112983 second(s), 5 queries

清除 Cookies - 联系我们 - Linux伊甸园 - Archiver - WAP