![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
linux操作系统
文章平均质量分 59
「已注销」
这个作者很懒,什么都没留下…
展开
-
opendir----打开目录函数
opendir 打开目录相关头文件:#include #include 函数原型:DIR *opendir(const char *name);函数说明:opendir()函数用来打开参数name指定的目录,并返回DIR *形态的目录流,和open函数类似,接下来对目录的读取和搜索都要使用此返回值。返回值:成功返回DIR *形态的目录原创 2013-05-09 14:23:26 · 1746 阅读 · 0 评论 -
ipcs命令和ipcrm命令介绍
在进程间通信过程学习中,经常用到的两个命令:ipcs和ipcrm.查看ipc对象信息#ipcs查看全部ipc对象信息#ipcs -a查看消息队列信息#ipcs -q查看共享内存信息#ipcs -m查看信号量信息#ipcs -s删除IPC对象的ipcrmipcrm -[smq] ID 或者ipcrm -[SMQ] Key-q原创 2013-04-08 20:08:41 · 1026 阅读 · 0 评论 -
linux下C实现cat命令
#include #include #include #include #include #include #include int cats(const char *filename);void print(const char *filename, struct stat *st);void mode_to_letters(int mode, char原创 2013-04-07 21:24:37 · 4935 阅读 · 0 评论 -
在linux下创建自己的命令
当我们自己编写了一个比较好的程序,比如说,我写了一个打印文件的cat命令,觉得比较好用,你想把他当系统命令来使用。只需要简单的步骤就可以实现。 将你编译好的程序可执行文件复制到/bin目录下面。仅此而已。 编写自己的man资源,很简单,你编辑(用vi或其它任何文本编辑工具都可以)一个cat文件,里面是你的命令使用方法说明,然后用gzip cat命令把这手册压缩一下生成一个原创 2013-04-07 21:23:12 · 1157 阅读 · 0 评论 -
static关键字的作用
这个关键看似简单,但是在程序中却有很多的作用: 1、在函数体内,一个被申明为静态的变量在这一函数调用的过程中维持不变。 2、在模块内但是函数外,一个被声明为静态的变量可以被模块内所有函数访问,但是不能被模块外的函数访问。 3、他是一个本地的全局变量。在模块内,一个被申明为静态的函数只可被这一模块捏的函数调用,那就是,这个函数被限制在声明他的模块的本地范围内。原创 2013-04-07 21:20:11 · 614 阅读 · 0 评论 -
const和#define的用途和比较以及注意事项
const的用途: 不规范的说法:const意味着“只读”。 1、可以定义const变量 2、const可以修饰函数参数(输入参数)、返回值、甚至函数的定义体。被const修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。#define 宏定义: 宏定义中不能有分号,还有要注意宏定义中括号的使用。 const和#define都可以原创 2013-04-07 21:19:07 · 1037 阅读 · 0 评论 -
判断一个邮箱地址是否合格
主要使用的函数:memchr函数:在某一内存范围中查找一特定字符 #include void *memchr(const void *s,int c,size_t n) 函数说明:函数从头开始搜索s所指的内容内存前N个字节,直到发现第一个值为c的字节,则返回 指向该字节的指针; 返回值:如果找到指定的字节则返回改字节的指针,否则返回0. 判断一个邮箱地址原创 2013-04-07 21:12:48 · 3332 阅读 · 0 评论 -
BOOL,float,指针变量与零值比较的if语句
BOOL flag 与“零值”比较的if语句:标准答案: 不良风格: if(flag) if(flag == TRUE) if(!flag) if(flag ==原创 2013-04-07 21:01:16 · 1089 阅读 · 0 评论 -
makefile文件模板
linux下程序开发中,Makefile文件是一个很重要的工具文件。下面是简单的两个Makefile文件模板,大致可以按这样修改1、单个文件的Makefile文件模板CROSS_COMPILE = arm-linux- CC = $(CORSS_COMPILE)gccLD = $(CROSS_COMPILE)ldSTRIP = $(CROSS_COMPILE)strip原创 2013-04-08 20:15:07 · 876 阅读 · 0 评论 -
关于struct,union,enum三大复合数据类型
struct结构体struct声明一个结构体,它将一些相关联的数据打包成一个整体。首先看结构体占用内存空间的大小。struct student{ }stu;sizeof(stu)是多少?这里我们联想到前面讲到的模子的概念,大概就知道答案了。关于求结构体所占内存空间的大小,我们遵循字节对齐的原则,计算的出的结果是8的倍数。看下面的代码:struct stude原创 2013-04-08 19:54:04 · 7695 阅读 · 1 评论 -
C语言中三大经典的排序算法
掌握好常用的排序算法,在实际的项目开发中可以节省很多的时间。每一种排序算法在执行的效率上是存在差别的,这些微小的时间差,也许在平常的联系当中感觉不到,但是涉及到数据量比较大或者是在资源比较紧张的系统中就显得尤其的重要,比如嵌入式系统。下面简要介绍三种常用的排序算法以及他们的执行效率的比较。冒泡排序:思路:将相邻的两个数比较,将较小的数调到前头;有n个数就要进行n-1趟比较,第一次比较中要进原创 2013-04-08 19:59:44 · 14402 阅读 · 0 评论 -
linux网络编程之广播编程
广播方式主要是指使用UDP套接口发送数据,发送数据的目标地址不是普通的地址,而是所指定网络的广播地址。 什么是广播地址?是指IP地址中主机地址部分全为1的IP地址。下面是一个广播发送简单流程图。如何实现广播发送?一般情况下使用sendto函数只能向非广播地址发送数据,如果要发送广播数据就必须要告诉内核,可以通过设置套接字属性为SO_BROADCAST来坐到这一点。i原创 2013-04-15 20:10:31 · 3255 阅读 · 1 评论 -
基于select函数的单进程并发服务器程序----TCP
下面是一个简单的时间服务器程序。#include #include #include #include #include #include #include #include #include #define MAX_LISTEN 5 #define PORT 1234 i原创 2013-04-12 13:51:30 · 896 阅读 · 0 评论 -
linux网络编程多进程并发服务器
服务器端:#include #include #include #include #include #include #include #include #define PORT 1234#define MAXSIZE 1024static int clientProcess(int connfd, struct sockaddr_in clientSoc原创 2013-04-12 13:59:23 · 1010 阅读 · 0 评论 -
select函数介绍
阻塞方式block,就是进程或是线程执行到这些函数时必须等待某个事件的发生,如果事件没有发生,进程或线程就被阻塞,函数不能立即返回。使用Select就可以完成非阻塞non-block,就是进程或线程执行此函数时不必非要等待事件的发生,一旦执行肯定返回,以返回值的不同来反映函数的执行情况,如果事件发生则与阻塞方式相同,若事件没有发生则返回一个代码来告知事件未发生,而进程或线程继续执行,所以效率较高。原创 2013-04-12 13:47:11 · 771 阅读 · 0 评论 -
linux网络编程多进程并发服务器
服务器端代码#include #include #include #include #include #include #include #include #include #include #define PORT 1234#define MAXSIZE 1024struct ARG{ int connfd; struct sockaddr_in原创 2013-04-12 14:23:56 · 861 阅读 · 0 评论 -
struct tm时间和字节数之间的转换
在某些场合需要将时间存储格式压缩到4个字节,在字符串的时间和字节数的格式之间进行一个转换。短时间存储的格式:Time(HMS) /*时分秒*/ Bit Position0 1 2 3 45 6 7 8 9 AB C D E FLength(bit)56原创 2013-04-08 19:51:18 · 2535 阅读 · 0 评论 -
进程间通信之FIFO
管道使用起来很方便,但是没有名字,因此只能用于具有亲缘关系的进程之间进行通信,而有名管道就克服了这一点,FIFO管道提供了一个路径名与之相对应,即使进程不是亲缘进程,只要能访问到该路径就能使用FIFO进行通信。有名管道的创建:#include #include int mkfifo(const char *pathname, mode_t mode);第一个原创 2013-04-08 20:13:11 · 3479 阅读 · 0 评论 -
进程间通信之消息队列
在linux下有两种消息队列,一种是POSIX的消息队列,另一种是system v消息队列。system V消息队列使用消息队列标识符标识,在某个进程往一个队列中写入一个消息之前,不要求另外某个进程正在等待该队列上的一个信息的到达。对于系统中每个消息队列,内核都维护一个定义在头文件中的消息结构,结构定义如下:struct msqid_ds{ struct ipc_perm m原创 2013-04-08 20:07:01 · 700 阅读 · 0 评论 -
内存使用
在做嵌入式开发过程中,内存问题时时提醒着我们,小心小心又小心的使用者有限的内存。 内存分配方式:1、从静态区域分配。内存在程序编译的时候就已经分配好了,这块内存在程序的整个运行期间都存在。例如全局变量、static变量。2、在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配的运算内置于处理器的指令集中,效率很高,但是原创 2013-04-07 20:59:04 · 687 阅读 · 0 评论 -
关于x=x+1、x+=1、x++的执行效率问题
好久不来了,把最近遇到的一些问题贴出来,总结总结,增加自己对他们的记忆,欢迎各位网友不吝赐教! 关于x=x+1、x+=1、x++的执行效率问题是小弟在一次面试中以为面试官提及的。 x=x+1的效率最低,因为他的执行过程如下:1、读取右x的地址;2、x+1;3、读取左x的地址;4、将右值传给左边的x(编译器并不认为左右x的地址相同)x+=1其次,其执行过程如下原创 2013-04-07 20:50:46 · 896 阅读 · 0 评论 -
linux下segmentation fault(段错误)总结
Segment fault之所以能够流行于世,是与Glibc库中基本所有的函数都默认型参指针为非空有着密切关系的。 相信很多在linux做过开发的、学习linux编程的人都遇到过这个段错误,段错误是一个让人和头疼的问题。 那什么是段错误?段错误为什么是个麻烦事?以及怎么发现程序中的段错误以及如何避免发生段错误呢? 为了给自己的学习做个总结,下面就从上面的几个问题出发来探转载 2011-11-24 15:48:02 · 3569 阅读 · 0 评论 -
linux下文件操作总结
对于一个程序员来说,特别是对嵌入式程序员来说,对文件的操作是非常【频繁的,所以,对文件操作的知识就需要相当的熟悉,下面是我文件操作的一些总结。 文件部分由几个常用的函数,总结如下: 打开关闭文件函数:fopen()和fclose(); 字符读写函数: fgetc()和fputc(); 字符串读写函数: fgets()和fputs(); 数据段读写原创 2011-11-22 14:05:31 · 973 阅读 · 0 评论 -
linux下位运算总结
所谓的位运算指的是二进制位的运算。在系统软件中,常要处理二进制位的问题。例如,将一个存储单元中的二进制位左移或右移以为,两个数按位相加等等。 C语言中提供了如表1所列出的位运算符。表 1运算符含义运算符含义&按位与~取反|按位或原创 2011-11-22 14:04:36 · 1674 阅读 · 0 评论 -
linux启动过程
启动第一步--加载BIOS当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至于计算机必须在最开始就找到它。这是因为BIOS中包含了CPU的相关信息、设备启动顺序信息、硬盘信息、内存信息、时钟信息、PnP特性等等。在此之后,计算机心里就有谱了,知道转载 2011-10-10 14:55:04 · 1552 阅读 · 0 评论 -
MISC设备和CHAR设备
杂项设备(misc device)杂项设备也是在嵌入式系统中用得比较多的一种设备驱动。在 Linux 内核的include/linux目录下有Miscdevice.h文件,要把自己定义的misc device从设备定义在这里。其实是因为这些字符设备不符合预先确定的字符设备范畴转载 2011-10-10 17:22:21 · 580 阅读 · 0 评论 -
linux内核编译错误记录
1.ERROR: the symlink include/asm points to asm-x86 but asm-arm was expected set ARCH or save .config and run 'make mrproper' to fix转载 2011-10-10 17:15:44 · 819 阅读 · 0 评论 -
设置环境变量
1.export PATH=$PATH: /路径2.修改/etc/profile3.修改 /root/.bashrc 二三中方法需要注销生效 :1.确保安装了标准C开发环境,指令验证---- sudo apt-get install build-原创 2011-10-10 16:21:06 · 510 阅读 · 0 评论 -
把任务放在后台运行
1. 后台运行的两个命令 &和 ctr+z 一开始就+“&”具体方法是: [命令]空格[&] 比如: [root@pcmxexweb etc]# find / -name xml & 这样,这个查找程序就会在后台运行。它运行的同时不影响你干别的事情。转载 2011-10-10 16:15:41 · 513 阅读 · 0 评论 -
THIS_MODULE介绍
结构体struct module在内核中代表一个内核模块,通过insmod(实际执行init_module系统调用)把自己编写的内核模块插入内核时,模块便与一个 struct module结构体相关联,并成为内核的一部分。下面是结构体struct module的完整定义,接下来会逐个解释: struct module { enum module_state s转载 2011-11-30 17:03:33 · 618 阅读 · 0 评论 -
linux下自动创建设备文件节点---class
在驱动模块初始化函数中实现设备节点的自动创建我们在刚开始写Linux设备驱动程序的时候,很多时候都是利用mknod命令手动创建设备节点,实际上Linux内核为我们提供了一组函数,可以用来在模块加载的时候自动在/dev目录下创建相应设备节点,并在卸载模块时删除该节点,当然前提条件是用户空间移植了udev。内核中定义了struct class结构体,顾名思义,一个struct class结构体原创 2011-12-05 08:48:09 · 2726 阅读 · 0 评论 -
linux下的sed命令
1.简介sed是非交互式的编辑器。它不会修改文件,除非使用shell重定向来保存结果。默认情况下,所有的输出行都被打印到屏幕上。sed编辑器逐行处理文件(或输入),并将结果发送到屏幕。具体过程如下:首先sed把当前正在处理的行保存在一个临时缓存区中(也称为模式空间),然后处理临时缓冲区中的行,完成后把该行发送到屏幕上。sed每处理完一行就将其从临时缓冲区删除,然后将下一行读入,进行处理和显转载 2011-12-18 11:04:23 · 850 阅读 · 0 评论 -
strcpy和memcpy函数的实现
strcpy函数的原型为:char *strcpy(char *strDest,const char *strSrc) char *strcpy(char *strDest,const char *strSrc){ assert((strDest != NULL) && (strSrc != NULL)); char *address = str原创 2013-04-07 21:26:13 · 798 阅读 · 0 评论 -
嵌入式面试中遇到几道笔试题
嵌入式编程方面的问题:1、找出下面程序的错误 (一个中断服务子程序ISR) interrupt double compute_area(double radius) { double area = PI *radius * radius; printf("\nArea=%f",area); return area;原创 2013-04-07 21:21:47 · 3824 阅读 · 0 评论 -
C语言实现的linux下ls命令
用C语言实现linux下的ls -l命令。与文件相关的结构体、函数等等知识请看"stat结构体以及文件相关函数"#include #include #include #include #include #include #include #include void do_ls(char *dirname);voi原创 2013-04-07 21:15:41 · 10772 阅读 · 4 评论 -
守护进程
UNIX操作系统为用户提供inetd daemon 进行网络服务管理。它将所有的后台应用程序置于它的管理之下,在客户端没有请求时,所有的后台应用程序都不启动,一旦客户端有特定的请求上来,它将根据/etc/services 和/etc/inetd.conf 文件描述的请求端口号和服务名调动相应的应用程序进行处理,而其它后台应用程序是不启动的。被启动的应用程序完成了特定任务后就终结自己的进程,这就减轻原创 2013-04-07 20:44:29 · 799 阅读 · 0 评论 -
比较两个数的大小
比较两个数大小的方法 比较两个数大小的方法有很多种,如if、?:、switch等其他的判断语句。在这里看看其他的方法: 方法1、 a=a+b; b=a-b; a=a-b; 方法2:原创 2013-04-07 21:27:19 · 1060 阅读 · 0 评论 -
stat结构体以及文件状态相关函数
基本的stat结构体的大体组成成员如下: struct stat { mode_t st_mode; //文件类型或文件模式 ino_t st_ino; //目录进入点的inode节点 dev_t st_dev; //系统文件设备 dev_t st_rdev; //特殊文件设备原创 2013-04-07 21:17:25 · 2615 阅读 · 0 评论 -
关于sizeof和strlen的使用
关于sizeof和strlen经常容易搞混淆,特别是初学者。 先看一个关于sizeof的应用的实例: 写出下面程序的答案: 答案:4,11,100,400,4,3,4,6,8,4,4 1、ss1是一个指针,指针的大小是一个定值,就是4. 2、ss2是一个字符数组,这个数组的出事大小原创 2013-04-07 21:08:10 · 901 阅读 · 0 评论 -
嵌入式系统编程中的全局变量的使用
在嵌入式系统编程中,一般很少建议使用全局变量进行参数的传递,因为全局变量将破坏函数的封装性。并且会浪费一些内存,但是他至少还是有下面两个好处:1、节省了函数切换的开销——参数的入栈、出栈2、可以随时检测和控制内存的使用量,在编译过程中就可以知道程序运行时将占用多大的内存,如果使用堆或者是栈是不可能知道这些内容的。全局变量是不可冲入的。 嵌入式系统中参数的传递方式:当调原创 2011-12-20 09:21:16 · 2591 阅读 · 0 评论