linux 编程指南 linux基础知识点

编程Linux下Socket编程指南linux下socket

Linux下Socket编程指南

Linux Socket编程是指在Linux操作系统下编写Socket编程应用的一种编程技术。Socket是一个抽象的对象,提供了一种用于多进程编程的表达有效的方式。它可以用来实现网络通信,编程语言中都支持部署Socket。本文介绍Linux下可用于Socket编程的工具和技巧,以及实现Socket编程的基本原理。

主要工具

首先要介绍的是Linux下可用于Socket编程的主要工具—Linux socket API(Socket Application Programming Interface,简称socket API)。Socket API提供了Socket编程使用的函数和头文件,比如socket()、bind()、listen()等函数,所有的Socket函数都声明在头文件中。

C语言函数

Socket编程的Runtime库主要的函数是以下几类:

socket():建立Socket,创建一个文件描述符。

bind():本地地址socket绑定,指定当前Socket的Local address。

listen():调用listen,开始监听该Socket的套接字。

connect():发起连接请求,与服务器建立连接。

send():发送数据,向远程主机发送数据。

recv():接收数据,从远程主机接收数据。

close():关闭Socket,断开Socket连接。

socket()和bind()函数可以用来建立本地服务器,listen()函数调用开始监听;connect()函数可以用于建立客户端,send()和 recv()可以实现客户端和服务器之间的数据传输,最后调用close()关闭Socket连接。

server.c

// Linux Socket编程例子,这里是服务器端代码

#include

#include

#include

#include

#include

#define MAX_LEN 1024

int main(int argc, char** argv)

{

//1.建立socket

int sockfd= socket(AF_INET, SOCK_STREAM, 0);

if(sockfd

perror(“socket failed”);

return-1;

}

//2.准备通信地址

struct sockaddr_in addr;

memset(&addr, 0, sizeof(addr));

addr.sin_family= AF_INET;

addr.sin_port= htons(12345);

addr.sin_addr.s_addr= INADDR_ANY;

//3.绑定socket和地址

int ret= bind(sockfd,(struct sockaddr*)&addr, sizeof(addr));

if(ret

perror(“bind failed”);

return ret;

}

//4.监听连接

ret= listen(sockfd, 5);

if(ret

perror(“listen failed”);

return ret;

}

//5.接收连接

int new_sockfd= accept(sockfd, NULL, NULL);

if(new_sockfd

perror(“accept failed”);

return ret;

}

//6.接收数据

const char* data=“hello world!”;

ret= send(new_sockfd,data, strlen(data), 0);

if(ret

perror(“send failed”);

return ret;

}

//7.关闭socket

close(sockfd);

close(new_sockfd);

return 0;

}

Socket编程可以实现跨操作系统、跨语言、进程互通,是一种优秀的网络编程技术。本文介绍了Linux下socket编程的工具和技巧,以及实现Socket编程的基本原理,并给出了一个例子,希望能为初学者的学习带来帮助。

如何学习linux,有什么入门的经典书籍

起步

你应该为自己创造一个学习linux的环境--在电脑上装一个linux或unix

问题1:版本的选择

北美用redhat,欧洲用SuSE,桌面mandrake较多,而debian是技术最先进的linux

开发人员中用debian的最多,其次是redhat,从全球linux各应用领域市场份额来看

无疑redhat是最多的,此外还有很多出名的发行版本,不再列举。

对于初学linux的人来说,我建议是使用redhat,原因如下:

1)现在很多书都是以redhat为例讲的,为了与书本协调一致

2)周围的人都用redhat,交流比较方便

3)redhat应用范围广,有典型性和代表性

4)它易于使用和安装,我们没有必要把时间浪费在“装系统”上

而应集中精力学习最有用的东西。

//注:现在觉得RH很死板,AS,ES等用在服务器上或许不错,

Personal desktop用mandrake,debian,suse都不错,笔者现在用Mandrake,因为她长得漂亮

如果你并不打算深入学习linux,而是有诸如适应北京市政府办公平台迁移到

linux上这种需要,那么中软,红旗等中文linux是不错的选择

我强烈建议:自己亲自动手把linux装到你的硬盘上,

你必须学会独立安装linux系统的技能,对于现在的版本来说,其实跟装WinXP一样简单

从此现在开始,请不要以windows的工作方式来考虑问题,

应该尝试挖掘linux身上的“天才unix”的气质。

三.进阶

掌握至少50个以上的常用命令

理解shell管道"|",文件流重定向">"及追加">>"等

熟悉Gnome/KDE等X-windows桌面环境操作

掌握.tgz.rpm.biz等软件包的常用安装方法

学习添加外设,安装设备驱动程序(比如modem)

熟悉Grub/Lilo引导器及简单的修复操作

熟悉系统固有目录的名称及公用

学会用mount命令访问其他文件系统

了解vi,gcc,gdb等常用编辑器,编译器,调试器

学习linux环境下的简单组网

建议:买一本不需要太厚的linux教材,大致可以满足要求

//现在的书越来越多了,还带很多图,我当时可没这么多书:)

四.高级应用

澄清一些概念:

linux的普通操作与真正的系统管理不能相提并论,后者需要很多知识

我个人认为比较重要几种linux语言

1.英语

即使你不学linux,我也强烈建议你学好英文[U.S.english]

因为实质上计算机语言就是英文和字符,所谓的多国语言只是外部包装

你必须能无障碍的阅读大量的英文技术文档

在搜索引擎找到的英文网站和网页中熟练的检索

最好能有用英文直接交流的能力,

摆脱了这个障碍,你的学习和理解速度就能快很多,你就有机会拉开和别人的差距

2.shell[sed/awk]

shell是命令解释器,是内核与用户界面交流通道,shell写的小脚本有点类似于win下的.bat

但shell比.bat强大的多,shell不只是解释命令,更是一种编程语言,有时候几百行的c用shell

几十行就能代替完成工作,因为shell的工作方式建立在系统已有的众多应用程序之上

这也是CS中的一个重要思想。

此外,shell可以实现工作自动化,这个概念也比较重要

sed,awk用来处理文本,历来很常用

3.Perl/PHP

漂亮的脚本, CGI的首选,比ASP好,应用面很广

4.C\C++

C、C++是linux/unix的核心语言,系统代码都是C写的

5.ASM

系统底层及内核,硬件,设备驱动程序,嵌入式开发都需要

//走核心路线的话,个人认为c\c++,asm最重要

6.Java,Python,Tcl,XML

*系统管理篇

在熟悉linux的基础上还需要掌握至少一种unix

我首推Solaris,其次是FreeBSD

比如运营级系统一般是Solaris+Oracle/DB2之类的

学习apache,ssh,sendmail/Qmail,proftp/vsftp,Samba,Squid,MySQL/PostgreSQL/Oracle,Bind

等各种应用服务器的构架及电子商务的应用

熟悉TCP/IP协议族,学习诸如apache+php+proftp+mysql+quota的实现以及大型局域网,分布式集群

等各种企业级应用解决方案

熟悉多用户管理,数据库管理,文件系统,逻辑存储管理,日志分析,备份与灾难数据修复

系统补丁,内核升级,以及在此基础上的防火墙构架等以保障系统安全在内的各种系统管理技能

我觉得,如果在此基础上再掌握路由/交换设备便是一个不错的系统管理员:D

各种基于linux的解决方案可参考相关书籍和文献,必要时用google或各大linux站点站内

搜索引擎寻找最新文档,以避免错误和漏洞

有几本技术大全和技术内幕我认为都是这方面不错的书

*深入学习linux

我个人理解的读linux内核需要的基础:

在此之前,希望先把应用层的东西学一下,那样会比较好理解

1.C

如果学过潭浩强的大学教科书(除了编几个数学模型好像什么也做不了的那种),

建议再看一下

《The C Programming Language》Second Edition这本圣经

/*如果想学缓冲区溢出,这点C的功力可能是不够的*/

还有,<C陷阱与缺陷>,<C专家编程>,<C\C++深层探索>

反正经典书看多了是没有坏处的:)

2.asm(AT&T语法,保护模式)

保护模式下的比较复杂,基本上每本讲内核的书都会有介绍

有80x86 Intel语法的基础就行,

有兴趣可以看看Intel的官方白皮书

3.数据结构(离散数学)

计算机专业的核心课程,重要性我就不说了

4.操作系统原理

看懂这个再去读linux吧

5.微机原理/组成原理(数字电路)

底层直接和硬件打交道,所以这个也要

6.了解linux/unix

我想至少你要会操作吧,了解unix的API

7.软件工程/编译原理

这方面的经典书去www.china-pub.com可以搜到很多

我觉得APUE这种书不适合初学者,还是先看看UPE之类的吧

APUE:

《advanced programming in the unix environment》

《unix环境高级编程》

作者:W.Richard.Stevens共有6本经典书,尊为“圣经”

他的书为全世界黑客所拜读!

UPE:《unix programming environment》

《unix编程环境》比较适合初学者的,深入浅出,

其中有一些比较重要的思想

另外,介绍linux下应用层编程的书也有很多,比如

<GNU\Linux编程指南>,redhat,redflag出的书...........

经典书还有很多很多......

操作系统:设计与实现//交大的考研参考书目,讲Minix的

unix操作系统设计

4.4BSD操作系统设计与实现

昂莱氏unix源代码分析

ulk:understanding the linux kernel(2nd)深入理解linux内核

linux设备驱动程序(2nd)

linux内核源代码情景分析

保护方式下的80386及其编程(次书已绝版,只有超星的电子版,如果谁能搞到纸书,清一定告诉我一下,非常感激!!!)

在这里你能明白"黑客"及"haching"一词所代表的真正意义

希望我写的这篇文章能造就更多的黑客,而不是骇客

五.一些资源

www.linuxforum.net//国内最高水平GNU站点

www.chinaunix.net//unix、系统管理的不错

www.linuxeden.com//下载软件不错

www.linuxaid.com.cn

www.linuxsir.org

其实还有很多,包括国外的

以上内容是转载别人的

这些是关于linux的

至于嵌入式的学习,需要很高深的硬件知识

对编程和系统移植有很深的认识才行

嵌入式是一种包括了DSP及arm等最小系统板的统称

其结构也各不相同,有些是传统的冯诺依曼结构,在DSP领域大部分用的是改进的哈佛结构

学嵌入式一定要学linux,这个是很关键的环节

<<unix环境高级编程>>是linux,和Unix的圣经,大师作品,好得无法形容。

<<莱昂氏UNIX源代码分析>>了解核心如何工作的。

还有<<Linux内核0.11分析>>。

你在网上到处都能找到。

网站,都是我常去的:

该怎样学习嵌入式Linux的基础课程

嵌入式Linux操作系统学习规划

ARM+LINUX路线,主攻嵌入式Linux操作系统及其上应用软件开发目标:

(1)掌握主流嵌入式微处理器的结构与原理(初步定为arm9)

(2)必须掌握一个嵌入式操作系统(初步定为uclinux或linux,版本待定)

(3)必须熟悉嵌入式软件开发流程并至少做一个嵌入式软件项目。

从事嵌入式软件开发的好处是:

(1)目前国内外这方面的人都很稀缺。这一领域入门门槛较高,所以非专业IT人员很难切入这一领域;另一方面,是因为这一领域较新,目前发展太快,大多数人无条件接触。

(2)与企业计算等应用软件不同,嵌入式领域人才的工作强度通常低一些(但收入不低)。

(3)哪天若想创业,搞自已的产品,嵌入式不像应用软件那样容易被盗版。硬件设计一般都是请其它公司给订做(这叫“贴牌”:OEM),都是通用的硬件,我们只管设计软件就变成自己的产品了。

(4)兴趣所在,这是最主要的。

从事嵌入式软件开发的缺点是:

(1)入门起点较高,所用到的技术往往都有一定难度,若软硬件基础不好,特别是操作系统级软件功底不深,则可能不适于此行。

(2)这方面的企业数量要远少于企业计算类企业。

(3)有少数公司经常要硕士以上的人搞嵌入式,主要是基于嵌入式的难度。但大多数公司也并无此要求,只要有经验即可。

(4)平台依托强,换平台比较辛苦。

兴趣的由来:

1、成功观念不同,不虚度此生,就是我的成功。

2、喜欢思考,挑战逻辑思维。

3、喜欢C

C是一种能发挥思维极限的语言。关于C的精神的一些方面可以被概述成短句如下:

相信程序员。

不要阻止程序员做那些需要去做的。

保持语言短小精干。

一种方法做一个操作。

使得它运行的够快,尽管它并不能保证将是可移植的。

4、喜欢底层开发,讨厌vb类开发工具(并不是说vb不好)。

5、发展前景好,适合创业,不想自己要死了的时候还是一个工程师。

方法步骤:

1、基础知识:

目的:能看懂硬件工作原理,但重点在嵌入式软件,特别是操作系统级软件,那将是我的优势。

科目:数字电路、计算机组成原理、嵌入式微处理器结构。

汇编语言、C/C++、编译原理、离散数学。

数据结构和算法、操作系统、软件工程、网络、数据库。

方法:虽科目众多,但都是较简单的基础,且大部分已掌握。不一定全学,可根据需要选修。

主攻书籍:the c++ programming language(一直没时间读)、数据结构-C2。

2、学习linux:

目的:深入掌握linux系统。

方法:使用linux—〉linxu系统编程开发—〉驱动开发和分析linux内核。先看深,那主讲原理。看几遍后,看情景分析,对照深看,两本交叉,深是纲,情是目。剖析则是0.11版,适合学习。最后深入代码。

主攻书籍:linux内核完全剖析、unix环境高级编程、深入理解linux内核、情景分析和源代。

3、学习嵌入式linux:

目的:掌握嵌入式处理器其及系统。

方法:(1)嵌入式微处理器结构与应用:直接arm原理及汇编即可,不要重复x86。

(2)嵌入式操作系统类:ucOS/II简单,开源,可供入门。而后深入研究uClinux。

(3)必须有块开发板(arm9以上),有条件可参加培训(进步快,能认识些朋友)。

主攻书籍:毛德操的《嵌入式系统》及其他arm9手册与arm汇编指令等。

4、深入学习:

A、数字图像压缩技术:主要是应掌握MPEG、mp3等编解码算法和技术。

B、通信协议及编程技术:TCP/IP协议、802.11,Bluetooth,GPRS、GSM、CDMA等。

2010-8-21 16:46回复

122.90.173.* 2楼

C、网络与信息安全技术:如加密技术,数字证书CA等。

D、DSP技术:Digital Signal Process,DSP处理器通过硬件实现数字信号处理算法。

说明:太多细节未说明,可根据实际情况调整。重点在于1、3,不必完全按照顺序作。对于学习c++,理由是c++不只是一种语言,一种工具,她还是一种艺术,一种文化,一种哲学理念、但不是拿来炫耀得东西。对于linux内核,学习编程,读一些优秀代码也是有必要的。

注意:要学会举一反多,有强大的基础,很多东西简单看看就能会。想成为合格的程序员,前提是必须熟练至少一种编程语言,并具有良好的逻辑思维。一定要理论结合实践。

不要一味钻研技术,虽然挤出时间是很难做到的,但还是要留点余地去完善其他的爱好,比如宇宙,素描、机械、管理,心理学、游戏、科幻电影。还有一些不愿意做但必须要做的!

技术是通过编程编程在编程编出来的。永远不要梦想一步登天,不要做浮躁的人,不要觉得路途漫上。而是要编程编程在编程,完了在编程,在编程!等机会来了在创业(不要相信有奇迹发生,盲目创业很难成功,即便成功了发展空间也不一定很大)。

嵌入式书籍推荐

Linux基础

1、《Linux与Unix Shell编程指南》

C语言基础

1、《C Primer Plus,5th Edition》【美】Stephen Prata着

2、《The C Programming Language, 2nd Edition》【美】Brian W. Kernighan David M. Rithie(K& R)着

3、《Advanced Programming in the UNIX Environment,2nd Edition》(APUE)

4、《嵌入式Linux应用程序开发详解》

Linux内核

1、《深入理解Linux内核》(第三版)

2、《Linux内核源代码情景分析》毛德操胡希明著

研发方向

1、《UNIX Network Programming》(UNP)

2、《TCP/IP详解》

3、《Linux内核编程》

4、《Linux设备驱动开发》(LDD)

5、《Linux高级程序设计》杨宗德著

硬件基础

1、《ARM体系结构与编程》杜春雷着

2、S3C2410 Datasheet

英语基础

1、《计算机与通信专业英语》

系统教程

1、《嵌入式系统――体系结构、编程与设计》

2、《嵌入式系统――采用公开源代码和StrongARM/Xscale处理器》毛德操胡希明着

3、《Building Embedded Linux Systems》

4、《嵌入式ARM系统原理与实例开发》杨宗德著

理论基础

1、《算法导论》

2、《数据结构(C语言版)》

3、《计算机组织与体系结构?性能分析》

4、《深入理解计算机系统》【美】Randal E. Bryant David O''Hallaron着

5、《操作系统:精髓与设计原理》

6、《编译原理》

7、《数据通信与计算机网络》

8、《数据压缩原理与应用》

C语言书籍推荐

1. The C programming language《C程序设计语言》

2. Pointers on C《C和指针》

3. C traps and pitfalls《C陷阱与缺陷》

4. Expert C Lanuage《专家C编程》

5. Writing Clean Code-----Microsoft Techiniques for Developing Bug-free C Programs

《编程精粹--Microsoft编写优质无错C程序秘诀》

6. Programming Embedded Systems in C and C++《嵌入式系统编程》

7.《C语言嵌入式系统编程修炼》

8.《高质量C++/C编程指南》林锐

尽可能多的编码,要学好C,不能只注重C本身。算法,架构方式等都很重要。

这里很多书其实是推荐而已,不必太在意,关键还是基础,才是重中之重!!!

这是从百度福州鼎嵌贴吧看来的呵呵

建议楼主自己去它那看看

阅读剩余
THE END