随笔分类 -  linux C 速学笔记

本人一直从事windows 下c/c++ 开发,但由于工作需求转向linux c 开发。 特将个人学习笔记留于此。 所以 需要一些C编程基础的人看。
摘要:当了4年码农,如今还在继续。不是因为工资高,而是我还保留着当初那份编码的激情。 新手编程 包括很多工作4,5年的程序员 常见毛病如下: 1>堆积代码问题,实现一个功能代码堆积如山,该封装成函数的不分装,很多地方都有重复代码。而且重复率大于2。 2>命名规范问题,变量函数都无特定命名,且没有注释阅读困难维护困难。 3> C++ 和 C 混用问题。 C重上使用全局变量,C++讲究封装。所以混用时候一定注意全局变量的定义使用。 4> 程序注释问题,意思表达不清楚 错误表达。 5> 代码优化问题,写过的代码从来不进行优化。 6> 急于动手问题,给一个任务,不加... 阅读全文
posted @ 2013-07-16 17:43 皁仩腄覺 阅读(251) 评论(0) 推荐(0)
摘要:注意:本章使用第十一章的源码直接编译生成可执行文件 不在生成库 一种简单的方法就是将所有源文件都设置到VPATH路径下。然后像普通makefile 生成。我们不讨论这种情况。 先来看我们程序的目录组织结构 --- main.c ---common.h ---addsub --- add.c --- sub.c ---muldiv --- mul.c --- div.c Makefile组织: 1、各个子目录单独使用Makefile,主要生成相关的库,或者目标文件; 2、顶层Makefile负责将本目录下源代码文件编译成目标文件... 阅读全文
posted @ 2013-07-16 17:36 皁仩腄覺 阅读(283) 评论(0) 推荐(0)
摘要:工程中很多时候都会使用别人经过验证的库,或者第三方提供的库,现在很多工程中实际开发中是以库的形式对外发布,库主要分为静态库和动态库。 静态库: 编译时候加载进目标文件内部。程序运行时不需要该库。命名libxxx.a 动态库: 编译时链接至目标文件,只在目标文件内部指出连接地址。程序运行时加载动态库。 命名libxxx.so; 实例讲解: 本章实现 加法 、减法静态库,然后实现乘法、除法动态库。然后在main中调用。 现将每个文件代码列出如下: 注意:源代码拷贝编译可能通不过,原因是有些括号是中文符号。改之则可。 //add.cint addNum(int a,... 阅读全文
posted @ 2013-07-16 17:36 皁仩腄覺 阅读(184) 评论(0) 推荐(0)
摘要:(1 )errno 在系统编程中错误通常通过函数返回值来表示,并通过特殊变量errno来描述。每个线程都有自己的errno,根据errno值的不同,我们就可以知道自己的程序发生了什么错误,然后进行相应的处理。 errno这个全局变量在, extern int * __errno_location(void); #define errno (*__errno_location())。关于errno有三点需要特别注意: 1> 如果系统调用或库函数正确执行的话,errno的值是不会被清零。所以,在利用errno之前,最好先对函数的返回值进行判断,看是否发生了错误,返回值错误再利用errno判断 阅读全文
posted @ 2013-07-16 17:01 皁仩腄覺 阅读(325) 评论(0) 推荐(0)
摘要:(1) 阻塞模型 没有数据到达时候程序会一直阻塞直到有数据到达 如tcp 的recv 函数,当然也可以设置超时。(2)非阻塞I/O模型 通过fcntl函数设置socket 非阻塞模型 fcntl(sockfd, F_SETFL, O_NONBLOCK);如果没有数据到达会返回一个错误码。一般对于一般都对非阻塞I/O模型进行轮询,就是一直在检查这个状态,查看有无数据到达。(3)3. I/O复用模型 select模型 (重点) 利用select函数,判断套接字上是否存在数据,或者能否向一个套接字写入数据。目的是防止应用程序在套接字处于锁定模式时,调用recv(或send)从没有数据的套接字上... 阅读全文
posted @ 2013-07-16 15:19 皁仩腄覺 阅读(290) 评论(0) 推荐(0)
摘要:(一) 守护进程 守护进程(Daemon)是指那些随着系统启动,一直运行于系统整个生命周期的系统程序,它们一般不受用户登录注销影响。 它独立于控制终端并且周期性地执行某种任务或等待。 会话(session)是一个多个进程组的集合,每个进程都有一个父进程并且属于一个进程组,每个进程组都有一个进程组号,该号等于该进程组组长的PID号,一个进程只能为它自己或子进程设置进程组ID号。 每个进程都属于一个进程组,而进程组又属于某个会话。当用户从终端登录系统(不管是终端还是伪终端),系统会创建一个新的会话。在该终端上启动的进程都会被系统划归到会话的进程组中。 会话中的进程通过该会话中的领头进程... 阅读全文
posted @ 2013-07-16 11:15 皁仩腄覺 阅读(902) 评论(0) 推荐(0)
摘要:(1) 线程的概念 相信很多读者参加面试笔试的时候都被问及线程与进程的区别。我做概要分析如下 1> 进程是线程的载体,一个进程包含一个以上的线程,这些线程运行在进程的地址空间。 2>进程是系统资源的分配拥有着,所有进程内的线程均可访问资源。 3> 线程是处理器调度的基本单位,但进程不是 。 4> 每一个进程都有一个主线程,其它线程均有主线程直接简介产生。(2) 线程的控制 #include int pthread_create(pthread_t *restrict thread, const pthread_attr_t *restrict attr, void *( 阅读全文
posted @ 2013-07-12 15:44 皁仩腄覺 阅读(307) 评论(0) 推荐(0)
摘要:信号机制是linux 学习的一个难点,不像windows 消息那么简单。 (1) 信号的概念与产生 信号就是系统发给进程的命令, 有人叫软中断。我认为这是不确切的,因为中断是中止进程立刻进入中断指令。 而信号的执行要看系统内核的调度。 1> 终端键盘,I/O设备 eg: 键盘上CTRL+C 2> 调用系统函数发送信号 eg: kill SIGSEGV 7000或者 raise SIGSEGV 3> 软件条件 eg:alarm 函数 linux 系统定义信号如下,具体各个信号含义查阅相关文档。1)SIGHUP 2)SIGINT 3)S... 阅读全文
posted @ 2013-07-11 17:42 皁仩腄覺 阅读(289) 评论(0) 推荐(0)
摘要:管道分类: 根据进程的相互关系,可以分为:匿名管道与命名管道(1) 匿名管道 pipe#include int pipe(int pipes[2]); 管道是父进程和子进程间 单向的通讯机制。通过上述函数创建管道 会在内存开辟一块缓冲区,pipes[0] 读端,1写端。默认的是阻塞模式。 下面是一个简单的例子:#include #include #include #include void read_from_pipe(int pipe){ char ch; while(read(pipe, &ch, sizeof(char)) > 0 ) //block read ... 阅读全文
posted @ 2013-07-11 16:02 皁仩腄覺 阅读(211) 评论(0) 推荐(0)
只有注册用户登录后才能阅读该文。
posted @ 2013-07-11 14:13 皁仩腄覺 阅读(17) 评论(0) 推荐(0)
摘要:我选择的开发环境是ubuntuQilin 安装在wmware 中。 之所以选这个系统是因为它是中文linux 帮助文档都是中文。 安装samba 服务 主要是为了在windows 上编辑文件,在linux中编译。 没几个人相信命令行的vi 强于图形界面的文本编辑器。 Samba的主要任务就是实现Linux系统和Windows系统之间的资源共享。 (1)samba的安装:sudoapt-getinsallsambasudoapt-getinstallsmbfs (注意:新版本的samba服务中这一步已经不需要了)(2)创建共享目录:sodu mkdir/home/sambashares... 阅读全文
posted @ 2013-07-11 14:09 皁仩腄覺 阅读(219) 评论(0) 推荐(0)
摘要:注意:makefile仅仅是一个编译期的一个过程,随时可以修改,应尽量简单化,避免太复杂的逻辑,修改不便。 从工程中来看makefile 尽量在短时间内完成需要的时候可以修改。不用占据很长世间。 在这里我强烈建议手写makefile ,避免使用automaker autoconfig 之类的工具生成makefile 即使编译出错手写的也容易检查。本文只列出常用makefile 特性,对于其它不常用的建议参考gun make手册。(1) makefile 的三条规则 1> 如果这个工程没有编译过,那么我们的所有C文件都要编译并被链接。 2> 如果这个工程的某几个C 文件被修改,那么我 阅读全文
posted @ 2013-07-11 14:08 皁仩腄覺 阅读(307) 评论(0) 推荐(0)
摘要:学习linux/unix 编程 shell脚本毕不少。 本文只有全面介绍,详细介绍查阅相关资料。只让读者对脚本有个简单了解。现实中也不大可能把所有记住,只要有印象出来查阅资料就行。(1)基本结构 1> shbang 脚本文件的第一行 通知内核使用那种脚本解释器 #!后面跟解释器路径名 eg:#!bin/bash 2> 注释 以#开始的行 3> 通配符 包括正则表达式 * ? [] 还有I/O重定向 管道 | 等,具体查阅相关知识 4> 显示输出 echo 命令 5> 局部变量 eg:varname=value1 myname=“wxr” itegerNum=10 阅读全文
posted @ 2013-07-11 14:06 皁仩腄覺 阅读(233) 评论(0) 推荐(0)
摘要:注意 : 本文不做命令详细解释,只做命令快速入门。详细命令使用可使用命令帮助,稍后会解释。shell 的命令基本格式 : [Command] [Option] [Param] 即 命令 选项 参数 中间 ,这三项中间以空格相隔。 (1) 帮助类命令1> help 显示shell 所有命令 eg: $ help 2>help [Command] 获取命令帮助信息 eg: $ help pwd 3>[Command] --help 只显示命令帮助概要信息 eg: $ls --help 4> man [Command] 查看手册页帮助 eg: $m... 阅读全文
posted @ 2013-07-11 14:02 皁仩腄覺 阅读(205) 评论(0) 推荐(0)