`
dato0123
  • 浏览: 970951 次
文章分类
社区版块
存档分类
最新评论

《Beginning Linux Programming》读书笔记(四)

 
阅读更多

1,读写空指针

先看第一种情况,printf试图访问空指针,以打印出字符串,而sprintf试图向空指针写入字符串,这时,linux会在GNU C函数库的帮助下,允许读空指针,但不允许写空指针。

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->#include<unistd.h>
#include
<stdlib.h>
#include
<stdio.h>

intmain()
{
char*some_memory=(char*)0;
printf(
"Areadfromnull%s/n",some_memory);
sprintf(some_memory,
"Awritetonull/n");
exit(EXIT_SUCCESS);
}

再来看第2种情况,直接读地址0的数据,这时没有GNU libc函数库在我们和内核之间了,因此不允许执行。

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->#include<unistd.h>
#include
<stdlib.h>
#include
<stdio.h>

intmain()
{
charz=*(constchar*)0;
printf(
"Ireadfromlocationzero/n");
exit(EXIT_SUCCESS);
}

2,今天看到400页了,做个小结。第三章文件和目录,第四章参数,选项处理和环境变量,第五章和第六章都是终端的编程,第7章内存管理和文件加锁机制,包括整个文件封锁和部分区域封锁,第八章MySQL跳过不看,

3,使用make命令就可以完成编译,修改某些源码后再次make就可以编译修改部分与其他引用到的文件。下面是最简单的一个示例:

main.c

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->#include<stdio.h>
#include
"hello.h"

intmain()
{
printf(
"hi,firstline/n");
sayHello();
return0;
}

hello.h

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->voidsayHello();

hello.c

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->#include"hello.h"

voidsayHello()
{
printf(
"hello,world/n");
}

Makefile

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->helloworld:main.ohello.o
gcc
-ohelloworldmain.ohello.o
main.o:main.chello.h
gcc
-cmain.c-omain.o
hello.o:hello.chello.h
gcc
-chello.c-ohello.o
clean:
rm
-rf*.ohelloworld

执行

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->make
.
/helloworld
makeclean

4,对上面Makefile的第一个改进版本

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->OBJFILE=main.ohello.o
CC
=gcc
CFLAGS
=-Wall-O-g

helloworld:$(OBJFILE)
$(CC)
-ohelloworld$(OBJFILE)
main.o:main.chello.h
$(CC)$(CFLAGS)
-cmain.c-omain.o
hello.o:hello.chello.h
$(CC)$(CFLAGS)
-chello.c-ohello.o
clean:
rm
-rf*.ohelloworld

5,对上面Makefile的第二个改进版本

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->CC=gcc
CFLAGS
=-Wall-O-g
TARGET
=./helloworld

%.o:%.c
$(CC)$(CFLAGS)
-c$<-o$@
SOURCES
=$(wildcard*.c)
OBJFILE
=$(patsubst%.c,%.o,$(SOURCES))
$(TARGET):$(OBJFILE)
$(CC)$(OBJFILE)
-o$(TARGET)
chmoda
+x$(TARGET)
clean:
rm
-rf*.o$(TARGET)

6,上面Makefile的第三个改进版本,加入install功能

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->#whichcomplier
CC
=gcc
#
wheretoinstall
INSTDIR
=/usr/local/bin
#
whereareincludefileskept
INCLUDE
=.
#options
fordev
CFLAGS
=-Wall-O-g

TARGET
=./helloworld

%.o:%.c
$(CC)$(CFLAGS)
-c$<-o$@
SOURCES
=$(wildcard*.c)
OBJFILE
=$(patsubst%.c,%.o,$(SOURCES))
$(TARGET):$(OBJFILE)
$(CC)$(OBJFILE)
-o$(TARGET)
chmoda
+x$(TARGET)
clean:
rm
-rf*.o
install:$(TARGET)
@if[
-d$(INSTDIR)];/
then/
cp$(TARGET)$(INSTDIR);/
chmoda
+x$(INSTDIR)/$(TARGET);/
chmodog
-w$(INSTDIR)/$(TARGET);/
echo
"installedin$(INSTDIR)";/
else/
echo
"sorry,$(INSTDIR)doesnotexist";/
fi

执行:

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->makeinstall
makeclean

参考资料:

1,《Linux平台Makefile文件的编写基础篇

分享到:
评论

相关推荐

    Beginning Linux Programming, 4th Edition.pdf

    Beginning Linux Programming, Fourth Edition continues its unique approach to teaching UNIX programming in a simple and structured way on the Linux platform. Through the use of detailed and realistic ...

    Beginning Linux Programming, 4th Edition

    《Beginning Linux Programming, 4th Edition》(《Linux编程起步》第四版)是由Neil Matthew和Richard Stones编写,由Wiley Publishing公司出版的一本针对Linux程序设计的教材。该书详细介绍了Linux环境下的多种...

    Beginning Linux Programming 3rd Edition pdf

    《Beginning Linux Programming》是一本专为初学者编写的Linux编程指南,旨在帮助读者掌握Linux环境下程序开发的基本技能。本书不仅介绍了Linux操作系统的基本概念和工作原理,还深入探讨了如何在Linux平台上编写...

    Beginning Linux Programming 4th Edition code

    《 Beginning Linux Programming 4th Edition code》是关于Linux程序设计的经典著作的第四版源代码,结合了实际的编程示例和深入的理论讲解,旨在帮助开发者理解和掌握在Linux环境下编写程序的技术。这本书覆盖了从...

    Beginning Linux Programming 4th

    《初识Linux编程》第四版是一本专门为想要深入理解Linux操作系统和编程的初学者准备的指南。这本书详尽地介绍了Linux编程的基础知识,涵盖了从基本的命令行操作到高级的系统调用和程序开发的各个方面。 在Linux的...

    Beginning linux programming(随书源码)

    Beginning linux programming(随书源码,非书籍) 从Linux编程开始,第四版继续以独特的方式在Linux平台上以简单和结构化的方式教授UNIX编程。 通过使用详细而实际的示例,学生可以边做边学,并且能够从Linux初学者...

    Beginning Linux Programming 4th Wiley 2008 (英文pdf+源码)

    《初识Linux编程》第四版是由Neil Matthew...通过阅读《初识Linux编程》第四版,读者将全面掌握这些知识,并有能力编写和调试Linux环境下的应用程序。这本书不仅适合初学者,也适合有一定经验的开发者进一步提升技能。

    Beginning Linux Programming(3th)

    Beginning Linux Programming(3th).part01.rarBeginning Linux Programming(3th).part01.rarBeginning Linux Programming(3th).part01.rarBeginning Linux Programming(3th).part01.rar

    Beginning Linux Programming 4th Edition

    Welcome to Beginning Linux Programming, 4th Edition, an easy-to-use guide to developing programs for Linux and other UNIX-style operating systems. In this book we aim to give you an introduction to a ...

    Beginning Linux Programming 3rd edition.pdf

    《Beginning Linux Programming 3rd edition》是一本专为初学者设计的Linux编程指南,由Neil Matthew和Richard Stones共同编写,于2004年由Wiley Publishing, Inc.出版。本书全面介绍了Linux环境下C语言编程的基础...

    Beginning Linux Programming 3rd-en

    《 Beginning Linux Programming 3rd-en》是一本专为Linux编程初学者设计的经典教程。这本书深入浅出地介绍了在Linux环境下进行C语言编程的基础知识和技术,是学习Linux开发者的必备参考资料。书中涵盖了广泛的议题...

Global site tag (gtag.js) - Google Analytics