Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1379477
  • 博文数量: 370
  • 博客积分: 10654
  • 博客等级: 中将
  • 技术积分: 4396
  • 用 户 组: 普通用户
  • 注册时间: 2010-08-07 15:44
文章分类

全部博文(370)

文章存档

2012年(36)

2011年(195)

2010年(139)

分类: LINUX

2011-07-30 17:16:18

西邮Linux兴趣小组10暑期学习周总结

第二周(722日至728日)

第一组

组长:刘丹阳

组员:王涛 陈雍 王亚莉 黄傲妮 黄博才 刘丹阳



本周任务


完成《鸟哥Linux的私房菜》基础学习篇第六、七章的学习。

完成《Linux C 编程实战》第六章的学习



陈雍第二周学习总结

本周通过对《鸟哥的私房菜》磁盘管理部分,和linux下C编程实战网络编程的学习。

1.学会了一些硬盘的知识,如硬盘前446字节为mbr,下来64字节为分区表,他们对对硬盘的重要性,以及利用 dd if=/dev/sda of=backup bs=512 count=1 来实现对硬盘的mbr以及分区表的备份,和利用相反命令 dd if=backup of=/dev/sda bs=512 count=1 来实现对已损坏的mbr或分区表进行修复。

2.利用新分区对swap空间的扩展,以及对swapon,swapoff命令的使用。利用dd if=/dev/zero of=test bs=1M count=100 ,mkswap test。 swapon test可实现利用文件对swap的扩展。还有-p参数来实现对不同扩展的swap优先级的管理。另外,利用dd命令,可以对U盘内容进行类似加密的处理,还可以新增很多文件系统以供使用。

3.学会了利用tune2fs 命令来实现查看磁盘的详细信息,如磁盘的卷标,挂载选项,UUID,还有对这些信息的修改,如再挂载选项中可加入是否支持ACL以及磁盘限额。可修改磁盘卷标以方便在/etc/fstab利用LABLE=”...”使其开机自动挂载。

4.了解了linux下网络编程的基本方法以及工作模式,以及基于C/S模型的网络程序的实现原理。套字的创建,端口绑定和监听,连接和接收。和其中所涉及到的函数。

问题:

在实现本地端口监听的时候又个问题一直不明白:

我的程序大致为

#define PORT 8000

main()

{

#define PORT 8000 //自定义端口号

#define BACKLOG 10 //最大连接数

int main()

{

//创建socket

int sock_fd;/*监听socket*/

int client_fd;//传输socket

struct sockaddr_in my_addr;//本机IP

struct sockaddr_in remote_addr;//客户机IP

sock_fd=socket(AF_INET,SOCK_STREAM,0);//创建本机socket,ipv4,TCP流

if(sock_fd<0) {printf("创建socket失败");exit(1);}//创建失败时退出

//设置socket

my_addr.sin_family=AF_INET;//地址类型:ipv4

//端口号:8000

my_addr.sin_addr.s_addr=htonl(INADDR_ANY);//自动填入本机IP

//inet_addr("192.168.200.172");//手动设置ip地址

memset(my_addr.sin_zero,0,sizeof(my_addr.sin_zero));//填充0

//绑定端口

if(bind(sock_fd,(struct sockaddr *)&my_addr,sizeof(struct sockaddr_in))<0){perror("端口绑定失败,可能的原因");exit(2);}//绑定端口失败时退出

//监听端口

if(listen(sock_fd,BACKLOG)<0){perror("端口监听失败,可能的原因");exit(3);}//端口被占用或禁用时退出

(当直接写到这里然后编译,执行后发现本机的8000端口并没有处于监听状态)

…...

(但如果在这之后加一个死循环,发现本机的8000端口处于监听状态)

}

这是为何?那死循环明明是加在listen()函数之后的,加或不加那个listen()函数都是执行的一次啊,为什么加了死循环就可以让端口监听。而且我并没有用close()来关闭套节字。

黄傲妮第二阶段学习总结

一、学习小结

在第一阶段学习的基础上,这一周接触了相对来说比较难的文件操作,这一周主要学习了《linux C编程实战》的文件操作这一章;还有学习了鸟哥第六章文件属性与目录配置,第七章文件和目录管理,主要掌握了一些有关的命令。

二、存在问题

对于文件操作这一章,可能因为刚接触感觉得有点难,截止现在文件操作自己还是不能写出来,但是经过反复看反复思考还有请教学长,对文件操作加深了理解;对于文件操作不知道其他人有没有较好的学习技巧,希望可以得到指点。

三、心得体会

在这一周又学习很多新东西,虽然有的很难理解,但是一定坚持到底!继续探究!

黄博才第二周小结

   在这周里我主要还是精读《鸟哥的linux私房菜》,总算清楚了linux文件系统的框架,也懂得一些linux磁盘与文件系统管理,对一些基本的命令也逐渐熟悉了。当然,这主要靠多练习才会熟悉的,我基本都跟着书上的说的练习,在练习磁盘管理时,生怕搞坏硬盘,于是我拿个u盘试验,有的命令是可以在u盘上,但有些就有所限制了,一开始以为是鸟哥所说的文件系统格式和我的不一样,但后来才弄明白硬盘和u盘的存储机制是不一样的,所以多了解一些硬件方面的知识对理解文件系统和编程是有好处的;学习文件与目录的默认权限与隐藏权限时似懂非懂,然而通过学长的辅导也弄明白了学多……   对于《linux c编程实战》,只看了前两节,算是对c语言基础的巩固和复习啦;此外,我也看了一点数据结构的内容,认识一点基本概念而已。

  一个关于栈的问题不太明白:

// 例1 :入栈操作

  typedef struct Node LStackNode;

  typedef struct Node *LStackedStack;

 void PushLinkStack(LinkedStack S , ElemType x)

 { 

LinkStack *p;

  p = (LStackNode *)malloc(sizeof(StackNode)); /*生成新结点*p */

if(p == NULL)

{

printf("申请空间失败!“);

exit(0);

}

  p->data = x;

  p->next = S->top;

  S->top = p;

 }

//以上是书本的例子,我认为它不用间接来使用top指针,在网上找到下面的例子

//  例2 :入栈/*将元素x插入链栈top的栈顶*/

 void PushLinkStack(LinkStack* &s , ElemType x)

 { 

LinkStack *p;

  p = (LinkStack *)malloc(sizeof(LinkStack)); /*生成新结点 */

  p->data = x;

  p->next = s;

  s = p;

 }

  我主要意思是书上的那个为什么还要另外加一个指针S(和top类型同),直接使用top(或S)一个行不? 用s有什么好处吗?

刘丹阳第二周学习总结:

这周把鸟哥的第六章和《linux C编程实战》的第7,8张看完了。到并发处理后感觉编程难度直接就上来了。其实主要是遇见的新函数太多了,一时半会可能不能完全记住。其实说到底这些函数的使用熟练度还是在于平常的多加练习才行。多写树上的程序觉得理解起来就相对容易多了。

再来谈谈变成中遇到的问题,其实主要是并发处理那部分锁的概念还不是很清楚。共享锁,互拆锁,条件变量这些控制进程和线程的同步与异步的功能还要多加练习。其实我一直不明白对于单核单cpu来说存在多程序的并行执行么?即使在编程中给它使用了多线程的技术,但是在实际情况中该程序还是同步执行的。。。并没又涉及到异步问题。所以再以后的学习中还要继续理解。

下周计划继续看鸟哥,然后看《POSIX多线程程序设计》来加强这些多线程的理解。


王涛第二周学习总结

一 .linux下c编程实战

1.经过上一周的学习,对于linux下的文件操作有了初步的学习,但是在一些细节的理解上还是有待提高,所以本周继续加深对文件操作的理解,对常用的函数的总结。

用open,write,read系统调用编写的两个版本的copy文件的程序,但是两者在效率上的差距说明了系统调用的开支是很巨大的。

版本1:

#include

#include

#include

#include

#include

int main( int argc,char **argv)

{

int count;

char block[1024];

int fileno1,fileno2;

fileno1 = open(*++argv, O_RDONLY);

fileno2 = open(*++argv, O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR);

while ((count = read(fileno1, block, 1024)) > 0)

write(fileno2,block,count);

return 0;

}

版本2:

#include

#include

#include

#include

#include

int main( int argc,char **argv)

{

char c;

int fileno1,fileno2;

fileno1 = open(*++argv, O_RDONLY);

fileno2 = open(*++argv, O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR);

while (read(fileno1, &c, 1) == 1)

write(fileno2,&c,1);

return 0;

}

对于1m的数据文件,两个程序的执行时间和效率都是不同的,所以在每一次系统调用时尽可能多的写出或写入数据是很有必要的,提高程序的效率。

相对于函数调用,系统调用的开销要大一些。但是硬件也会对底层系统调用一次能读写的数据会有一定的限制!

二. 鸟哥私房菜

这一周主要学习了鸟哥私房菜上面的第二部分,对文件与目录的管理,和文件系统做了简单的了解,以及一些常用命令的学习。

三. 问题。

在看c语言的时候遇到一个问题:

int *p = (int *)0xbffff328;

*p = NULL;

本来在第二句执行完后,应该是把地址0xbffff328中存的值改为0,但是p的地址直接就变为了0x0,为什么?

王亚莉第二周

第一,学习心得

1.通过对档案权限和目录配置和档案与目录管理的学习,慢慢喜欢上新系统啦,呵呵,很神奇很好玩儿;

2.编程实战中也有很多有趣的地方,但是一边下来,有很多地方还是很不懂。

第二,学习进度

1.鸟哥至今完成了第六七章;

2.实战编程第六章的第三节。

第三,遇到的问题

1.学习进度是完成了百分之七十,但是也只能算是有一个大概印象,要达到记忆精确现在的状态还差很远哦;

2.C语言需要恶补啦,呜呼;

5.在和同学听了一节C++之后,感觉原本想做的事情,不能这样老是这样拖着,现在只想行动起来,无论如何,全力以赴,做好自己现在这个阶段想要做的事情,嘻嘻。

小组周总结与讨论:

1、关于陈雍的问题,小组内部进行了讨论:
回答:此问题涉及进程方面的问题,因为进程打开后开始执行main()函数,如果没有最下面这个循环,进程在listen后会结束。而有了循环后进程不会结束。结束意味着会结束所有关于此程序的内容,所以监听也会因进程的结束而结束,很好证明这个,在程序的最后设置一个sleep(10)函数,之后可以观察到listen十秒后消失。

2关于王涛的问题:
回答:王涛的问题设计申请动态空间的问题,因为NULL是一个指着其值为(void *)0,C语言中指针站4字节,所以如果仅仅给*p=NULL是错误的,而应该是给p申请一个空间,这样就能保存此空指针了。

3关于黄博才的问题:
回答:原因是书上的例子错误了,而不是其他原因。

小组现阶段存在问题:组内成员有时候给的问题不够详细,希望可以具体化,方便大家讨论。
希望大家坚持住下一个星期,继续认真完成学习任务,不断的总结提高。
阅读(1032) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~