c语言vs怎么创建链表,怎么创建一个全局链表呢

C/C++ code//将c:\\tmp文件夹下的所有文件的内容全部放到用malloc分配的内存中

#include

#include

#include

#include

struct FB {

char fn[256];

size_t fl;

char *b;

struct FB *next;

struct FB *prev;

} *fh,*fb,*ft;

char ln[256];

char fpn[256];

FILE *af;

FILE *f;

int L,n;

int main() {

system("dir /b /a-d c:\\tmp\\*.* >c:\\allfn.txt");

af=fopen("c:\\allfn.txt","r");

if (NULL==af) {

printf("Can not open file c:\\allfn.txt!\n");

return 1;

}

fh=NULL;

fb=NULL;

n=0;

while (1) {

if (NULL==fgets(ln,256,af)) break;

L=strlen(ln);

if ('\n'==ln[L-1]) ln[L-1]=0;

printf("read %s\n",ln);

strcpy(fpn,"c:\\tmp\\");

strcat(fpn,ln);

ft=(struct FB *)malloc(sizeof(struct FB));

if (NULL==ft) {

printf("Can not malloc ft!\n");

fclose(af);

return 2;//之前的malloc在main退出后由操作系统自动free

}

printf("ft[%d]==%p\n",n,ft);

strcpy(ft->fn,fpn);

f=fopen(fpn,"rb");

if (NULL==f) {

printf("Can not open file %s!\n",fpn);

fclose(af);

return 3;//之前的malloc在main退出后由操作系统自动free

}

ft->fl=_filelength(fileno(f));

ft->b=malloc(ft->fl);

if (NULL==ft->b) {

printf("Can not malloc ft->b!\n");

fclose(f);

fclose(af);

return 4;//之前的malloc在main退出后由操作系统自动free

}

printf("ft[%d]->b==%p\n",n,ft->b);

if (ft->fl!=fread(ft->b,1,ft->fl,f)) {

printf("fread error!\n");

fclose(f);

fclose(af);

return 5;//之前的malloc在main退出后由操作系统自动free

}

fclose(f);

ft->next=NULL;

if (NULL==fh) {

ft->prev=NULL;

fh=ft;

} else {

fb->next=ft;

ft->prev=fb;

}

fb=ft;

n++;

}

fclose(af);

printf("-----list-----\n");

for (ft=fh;NULL!=ft;ft=ft->next) {

printf("%8d %s\n",ft->fl,ft->fn);

if (NULL!=ft) fb=ft;

}

printf("-----free-----\n");

n--;

if (NULL!=fh) {

for (ft=fb->prev;NULL!=ft;ft=ft->prev) {

if (NULL!=ft->next->b) {

printf("ft[%d]->b==%p\n",n,ft->next->b);

free(ft->next->b);

}

if (NULL!=ft->next) {

printf("ft[%d]==%p\n",n,ft->next);

free(ft->next);

}

n--;

}

if (NULL!=fh->b) {

printf("ft[0]->b==%p\n",fh->b);

free(fh->b);

}

printf("ft[0]==%p\n",fh);

free(fh);

}

return 0;

}

//C:\tmp\tmp\Debug>dir /a-d c:\tmp

// 驱动器 C 中的卷是 C_HD5_1

// 卷的序列号是 1817-D526

//

// c:\tmp 的目录

//

//找不到文件

//

//C:\tmp\tmp\Debug>tmp

//找不到文件

//-----list-----

//-----free-----

//

//C:\tmp\tmp\Debug>dir /a-d c:\tmp

// 驱动器 C 中的卷是 C_HD5_1

// 卷的序列号是 1817-D526

//

// c:\tmp 的目录

//

//2011-06-30 18:04 44,840 my_c.rar

//2011-06-30 17:18 1,036 err.frm

//2011-06-30 14:32 14,243 出租.txt

//2011-06-28 12:08 23,681 MSDN98书签.txt

// 4 个文件 83,800 字节

// 0 个目录 17,041,870,848 可用字节

//

//C:\tmp\tmp\Debug>tmp

//read my_c.rar

//ft[0]==00421800

//ft[0]->b==00520068

//read err.frm

//ft[1]==00421670

//ft[1]->b==0052AFC0

//read 出租.txt

//ft[2]==00421530

//ft[2]->b==00378F28

//read MSDN98书签.txt

//ft[3]==004213F0

//ft[3]->b==0052B3F8

//-----list-----

// 44840 c:\tmp\my_c.rar

// 1036 c:\tmp\err.frm

// 14243 c:\tmp\出租.txt

// 23681 c:\tmp\MSDN98书签.txt

//-----free-----

//ft[3]->b==0052B3F8

//ft[3]==004213F0

//ft[2]->b==00378F28

//ft[2]==00421530

//ft[1]->b==0052AFC0

//ft[1]==00421670

//ft[0]->b==00520068

//ft[0]==00421800

//

//C:\tmp\tmp\Debug>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值