linux-C
文章平均质量分 82
萌小宏
情不知所起,一往而深
展开
-
如何识别复杂的数据类型
近些年来,数据的类型往往成为各大公司出面试题的热门,如:int(*a[10])(int)等,看得人头昏眼花,不过不要紧,今天教你如何识别:**左右法则**int a int **a int a[10] int *a[10] int (*a)(int) int (*a[10])(int) int (*(*a)(int))[10]原创 2016-07-11 09:14:03 · 817 阅读 · 0 评论 -
linux下信号量实现通信
一、什么是信号量 为了防止出现因多个程序同时访问一个共享资源而引发的一系列问题,我们需要一种方法,它可以通过生成并使用令牌来授权,在任一时刻只能有一个执行线程访问代码的临界区域。临界区域是指执行数据更新的代码需要独占式地执行。而信号量就可以提供这样的一种访问机制,让一个临界区同一时间只有一个线程在访问它,也就是说信号量是用来调协进程对共享资源的访问的。信号量是一个特殊的变量,程序原创 2016-10-29 13:06:14 · 345 阅读 · 0 评论 -
进程和线程的对比
进程概念 进程是表示资源分配的基本单位,又是调度运行的基本单位。例如,用户运行自己的程序,系统就创建一个进程,并为它分配资源,包括各种表格、内存空间、磁盘空间、I/O设备等。然后,把该进程放人进程的就绪队列。进程调度程序选中它,为它分配CPU以及其它有关资源,该进程才真正运行。所以,进程是系统中的并发执行的单位。在Mac、Windows NT等采用微内核结构的操作系统中,进程的功能发生了原创 2016-10-29 22:49:56 · 279 阅读 · 0 评论 -
Linux sqlite3基本命令
1 、sqlite3常用命令当前目录下建立或打开test.db数据库文件,并进入sqlite命令终端,以sqlite>前缀标识:#sqlite3 test.db 查看数据库文件信息命令(注意命令前带字符'.'):sqlite>.database查看所有表的创建语句:sqlite>.schema 查看指定表的创建语句:sqlite>.schem原创 2016-10-30 22:17:41 · 1917 阅读 · 0 评论 -
exec函数族
1.execl 函数作用:执行文件 函数原型:int execl(const char * path,const char * arg,...); 头文件:#include 参数:path:文件路径 arg:表示执行该文件时传过去的argv[1],argv[2],…. 参数最后必须要以NULL结束 返回值:成功不返回,失败-12.execlp 函原创 2016-10-20 21:26:46 · 245 阅读 · 0 评论 -
实现常用字符串函数的功能
在现在的Linux版本下,支持许多的API函数,平时我们用得是挺舒服的,但是我们不光要用API函数,更重要的是,我们要知道这些API函数是怎样工作,执行的。我就用字符串的几个重要的函数来举例一:字符串比较函数strcmp();/***************************************************** copyright (C), 2016-2017,原创 2016-11-16 21:32:33 · 337 阅读 · 0 评论 -
字节、半字、字对齐方式详解
看到写的这篇文章对于对齐方式的理解蛮好的,因此和大家分享,不会或忘了的可以看一看!一、字节对齐基本概念 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。 对齐的作用和原因原创 2016-11-13 17:21:24 · 1102 阅读 · 0 评论 -
密码的输入带*号,可删除
#include int main(){ char mima[10]={0},i=0; printf("请输入密码:"); while(1) { mima[i]=getch(); switch(mima[i]) { case '\原创 2016-11-15 17:02:56 · 431 阅读 · 0 评论 -
五种IO 模式——阻塞(默认IO模式),非阻塞(常用语管道),IO多路复用(IO多路复用的应用场景),信号IO,异步IO
五种I/O 模式:【1】阻塞 I/O(Linux下的I/O操作默认是阻塞I/O,即open和socket创建的I/O都是阻塞I/O)【2】非阻塞 I/O(可以通过fcntl或者open时使用O_NONBLOCK参数,将fd设置为非阻塞的I/O)【3】I/O 多路复用(I/O多路复用,通常需要非阻塞I/O配合使用)【4】信号驱动 I/O(SIGIO)【5】异步 I/O 一转载 2016-11-22 18:40:39 · 335 阅读 · 0 评论 -
Linux下常用命令详解
gedit 显示行数在菜单栏的编辑->首选项 中有个显示行号的checkbox,选中即可。 根目录是整个系统最重要的一个目录,因为不但所有的目录都是由根目录衍生出来的,同时根目录也与开机/还原/系统修复等动作有关。 linux绝对路径和相对路径绝对路径是从/(也被称为根目录)开始的,比如/usr、/etc/X11。相对路径是以 . 或 .. 开始的,.表示用户当前原创 2016-11-26 20:54:50 · 345 阅读 · 0 评论 -
联合体的用法与特点
1.联合体union的基本特性——和struct的同与不同union,中文名“联合体、共用体”,在某种程度上类似结构体struct的一种数据结构,共用体(union)和结构体(struct)同样可以包含很多种数据类型和变量。不过区别也挺明显:结构体(struct)中所有变量是“共存”的——优点是“有容乃大”,全面;缺点是struct内存空间的分配是粗放的,不管用不用,全分配。而联合原创 2016-11-27 20:44:49 · 652 阅读 · 0 评论 -
linux 下sqlite的 C编程之sqlite3_get_table
{ sqlite3 *db; char *errmsg=NULL; //用来存储错误信息字符串 char ret=0; int my_age=0; //类型根据要提取的数据类型而定 char **dbResult; int nRow=0, nColumn=0; //nRow 查找出的总行数,nColumn 存储列原创 2016-12-16 18:06:32 · 1459 阅读 · 0 评论 -
带缓冲的I/O操作和不带缓冲的I/O操作
首先要明白不带缓冲的概念:所谓不带缓冲,并不是指内核不提供缓冲,而是只单纯的系统调用,不是函数库的调用。系统内核对磁盘的读写都会提供一个块缓冲(在有些地方也被称为内核高速缓存),当用write函数对其写数据时,直接调用系统调用,将数据写入到块缓冲进行排队,当块缓冲达到一定的量时,才会把数据写入磁盘。因此所谓的不带缓冲的I/O是指进程不提供缓冲功能(但内核还是提供缓冲的)。每调用一次write或re原创 2016-12-21 18:53:53 · 428 阅读 · 0 评论 -
Linux网络B/S和C/S的区别
一、什么是CS和BS结构? 1.C/S又称Client/Server或客户/服务器模式。服务器通常采用高性能的PC、工作站或小型机,并采用大型数据库系统,如Oracle、Sybase、Informix或SQLServer。客户端需要安装专用的客户端软件。 2.B/S是Brower/Server的缩写,客户机上只要安装一个浏览器(Browser),如Netscape Navigator或原创 2016-12-25 21:36:45 · 1233 阅读 · 0 评论 -
linux下解决文件乱码问题及查看文件编码方法
linux下对文件操作经常会遇见乱码问题,我在网上搜了一些解决方法,希望能对大家有所帮助。如果你需要在Linux中操作windows下的文件,那么你可能会经常遇到文件编码转换的问题。Windows中默认的文件格式是GBK(gb2312),而Linux一般都是UTF-8。下面介绍一下,在Linux中如何查看文件的编码及如何进行对文件进行编码转换。 查看文件编码原创 2016-11-09 20:15:09 · 1091 阅读 · 0 评论 -
Linux 不带缓冲的命令
1.creat函数的作用:创建一个文件函数的原型:int creat(const char * pathname,mode_t mode)参数的含义:第一个参数,是文件的的名字,可以写路径,没有路径那么就是当前的文件夹里面; 第二个参数是文件的权限的问题,主要是分为三组用户,以及三种的权限,三种用户返回值:成功的话 返回的是文件的描述符转载 2016-10-19 07:18:49 · 539 阅读 · 0 评论 -
linux 消息队列实现通信
一、什么是消息队列消息队列提供了一种从一个进程向另一个进程发送一个数据块的方法。 每个数据块都被认为含有一个类型,接收进程可以独立地接收含有不同类型的数据结构。我们可以通过发送消息来避免命名管道的同步和阻塞问题。但是消息队列与命名管道一样,每个数据块都有一个最大长度的限制。消息队列的最佳定义是:内核地址空间中的内部链表。消息可以顺序地发送到队列中,并以几种不同的方式从队列中获取。当然,每原创 2016-10-27 08:36:03 · 5706 阅读 · 0 评论 -
如何口算复杂的i++和++i
近些年来,各种笔试题就喜欢出这种自增自减运算符,这种题目若没有好的解题方法很烦人,今天我就教你接这种题目的方法,以后都是送分题。 小伙伴们先测试一下自己的水平: int main() { int i = 2; int num; num = (i++) + (i++) + (i++) + (i++); printf(“i = %d, num = %d”,i原创 2016-07-14 15:32:48 · 807 阅读 · 0 评论 -
my_strcpy,my_strcmp,my_strcat,my_strlen函数的实现
my_strcpy先看函数声明:char my_strcpy(char *dest, char src) { char *tmp = dest; while(*src != ‘\0’) { *tmp = *src; tmp++; src++; } *tmp = ‘\0’;原创 2016-07-16 09:46:14 · 1036 阅读 · 1 评论 -
深入理解指针,数组的基本概念
指针首先说一下指针指向的空间和对应的空间 p对应的空间就是它自己的的空间(即0x2000的空间) 指向的空间就是num的空间(即0x1000的空间)num++:就是对应的空间里面的值+1; p++:就是p对应空间里的值+1(注:这个+1,指的是加一个步长)(步长:就是一个模块,比如此时是int,4个字节,所以步长就是4,再比如,如果char型的步长1,接下来还会讲到)野指原创 2016-07-18 20:13:41 · 336 阅读 · 0 评论 -
c 函数
函数三要素:函数名,形参,返回值类型先看函数名:命名时我们应该注意命名一目了然(名称能够体现函数的功能)通常使用动词_名词(函数名具有自注释性) 函数名:是指针常量,保存函数存放的地址(即入口地址) 我们开始学习函数(或指针)时,总是出现这样一个程序 void swap(int a, int b) { int tmp; tmp = a; ab= b;转载 2016-07-20 20:33:03 · 274 阅读 · 0 评论 -
编码规范(一)
编码规范不是硬性要求,这只是良好的习惯,好习惯可以避免很多不必要的失误,我今天就简单的讲述一下,在编程时我们应该注意什么。1.在程序的排版方面,一开始我们应该用/* 说明这个程序的版权说明、版本号、生成日期、作者、内容、功能、与其它文件的关系、修改日志等,头文件的注释中还应有函数功能简要说明。*/便于讲述此程序的作用2.写头文件时,标准库文件用3.应尽量使用宏定义,便于后期的修改和维护原创 2016-07-21 10:36:08 · 543 阅读 · 0 评论 -
Linux中的文件锁
一、Linux 中的文件锁Linux 支持的文件锁技术主要包括劝告锁(advisory lock)和强制锁(mandatory lock)这两种。此外,Linux 中还引入了两种强制锁的变种形式:共享模式强制锁(share-mode mandatory lock)和租借锁(lease)。在 Linux 中,不论进程是在使用劝告锁还是强制锁,它都可以同时使用共享锁和排他锁(又称为读锁原创 2016-10-21 21:29:17 · 1284 阅读 · 0 评论 -
守护进程
本文主要包括三个部分: 一是如何实现一个守护进程,二是如何检测一个进程是否活着,三是保证某一执行文件只有一个实例在运行。1.守护进程守护进程的最大特点就是脱离了中断,Linux提供了一个系统调用daemon(),要想自定义实现的话,主要包括以下六个步骤:1.第一步是使用umask函数,把所有的文件屏蔽字置0。文件屏蔽字是可以继承的,当你有相关操作时,如果你要创建一个文件,继承过原创 2016-10-22 23:21:58 · 577 阅读 · 0 评论 -
linux文件操作
linux文件操作1. 什么是文件?linux如何看待文件?Linux一点哲学,“一切皆为文件”;在Linux中对目录和设备的操作都等同于对文件的操作,都是使用文件描述符来进行的。Linux文件可分为:普通文件,目录文件,链接文件,设备文件,管道文件。2. 如何来操作文件?C库函数的文件操作是独立于具体的操作系统平台的,不管是在DOS、Windows、Linux还是在VxW转载 2016-10-23 20:42:31 · 262 阅读 · 0 评论 -
Linux下的管道通信
管道通信方式分为无名管道和又名管道,无名管道可用于具有亲缘关系的进程间,有名管道可以没有亲缘关系的进程通信。1)管道是半双工的,数据只能向一个方向移动,所以,需要两个进程互相通信时需要建立两个管道。2)数据的读出和写入:一个进程向管道中写的内容被管道另一端的进程读出。写入的内容每次都添加在管道缓冲区的末尾,并且每次都是从缓冲区的头部读出数据。3)它是一个之存在与内存的特殊文件,并且数据原创 2016-10-24 18:58:33 · 360 阅读 · 0 评论 -
linux中有名管道的使用
有名管道又称为FIFO,是进程间通信的一种方式。FIFO具有以下特点: 1.全双工的通信模式,数据先进先出; 2.可以用于任意的进程之间,通过指定相同的管道文件进行通信; 3.文件名存在文件系统中,而管道中的内容存在于内存中。可通过open、read、write对其操作;有名管道的总体操作:创建管道mkfifo原创 2016-10-25 16:25:22 · 4700 阅读 · 1 评论 -
Linux下创建、打开、写入文件操作
linux下既然把所有的设备都看作文件来处理,就要熟练使用linux下文件操作的相关API。#include #include #include #include #define LENGTH 100 int main(int argc,char* argv[]) { int fd,len; char str[LENGT转载 2016-10-15 19:34:57 · 1443 阅读 · 0 评论 -
linux C编程 进程操作
1,linux进程操作1.1 函数system【调用fork】system()会调用fork()产生子进程,由子进程来调用/bin/sh -c string来执行参数string字符串所代表的命令,此命令执行完后随即返回原调用的进程。在调用system()期间SIGCHLD 信号会被暂时搁置,SIGINT和SIGQUIT 信号则会被忽略。、函数原型: int syste原创 2016-10-16 20:24:59 · 626 阅读 · 0 评论 -
linux中使用共享内存实现通信
一、共享内存介绍共享内存是被多个进程共享的一部分物理内存.共享内存是进程间共享数据的一种最快的方法,一个进程向共享内存区域写入了数据,共享这个内存区域的所有进程就可以立刻看到其中的内容.共享内存可以从字面上去理解,就把一片逻辑内存共享出来,让不同的进程去访问它,修改它。共享内存是在两个正在运行的进程之间共享和传递数据的一种非常有效的方式。不同进程之间共享的内存通常安排为同一段物理内存。原创 2016-10-26 20:20:47 · 1505 阅读 · 0 评论 -
堆(heap)和栈(stack)有什么区别?
简单的可以理解为: heap:是由malloc之类函数分配的空间所在地。地址是由低向高增长的。 stack:是自动分配变量,以及函数调用的时候所使用的一些空间。地址是由高向低减少的。 预备知识—程序的内存分配 一个由c/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据原创 2016-12-19 12:20:47 · 433 阅读 · 0 评论