码莎拉蒂 .
这个作者很懒,什么都没留下…
展开
-
linux之mutex(互斥锁)
在Posix Thread中定义有一套专门用于线程同步的mutex函数1. 创建和销毁有两种方法创建互斥锁,静态方式和动态方式。POSIX定义了一个宏PTHREAD_MUTEX_INITIALIZER来静态初始化互斥锁,方法如下: pthread_mutex_t mutex=PTHREAD_MUTEX_INITIALIZER; 在LinuxThreads实现中,pthread_mu原创 2017-03-12 23:45:07 · 4536 阅读 · 0 评论 -
linux c之snprintf()和sprintf()区别
1、snprintf函数int snprintf(char *str, size_t size, const char *format, ...);将可变个参数(...)按照format格式化成字符串,然后将其复制到str中(1) 如果格式化后的字符串长度 (2) 如果格式化后的字符串长度 => size,则只将其中的(size-1)个字符复制到str中,并给其后添加一个字符原创 2017-03-13 14:00:59 · 3997 阅读 · 0 评论 -
LeetCode之Single Number
1、题目Given an array of integers, every element appearstwiceexcept for one. Find that single one.Note:Your algorithm should have a linear runtime complexity. Could you implement it without原创 2017-03-28 20:17:41 · 2426 阅读 · 0 评论 -
linux之如何快速查看文件的大小
1、linux之如何快速查看文件的大小命令如下,每次都容易忘记,希望下次记住du -h原创 2017-03-12 01:49:43 · 5270 阅读 · 0 评论 -
linux c之c语言符合标准的头文件和linux常用头文件
1.C语言符合标准的头文件#include //设定插入点 #include //字符处理 #include //定义错误码 #include //浮点数处理 #include //文件输入/输出 #include //参数化输入/输出 #include //数据流输入/输出 #include //定义各种数据类型最值常量 #include //定义本转载 2017-03-07 15:01:56 · 4731 阅读 · 0 评论 -
linux c之使用pthread_create创建线程pthread_join等待线程和pthread_exit终止线程总结
1、介绍API1、pthread_create函数函数简介pthread_create是UNIX环境创建线程函数头文件#include函数声明int pthread_create(pthread_t *restrict tidp,const pthread_attr_t *restrict_attr,void*(*start_rtn)(void*),void *re原创 2017-03-06 21:33:15 · 13706 阅读 · 2 评论 -
linux c之通过消息队列实现进程通信
1、消息队列的介绍消息队列提供了一种从一个进程向另一个进程发送一个数据块的方法。 每个数据块都被认为含有一个类型,接收进程可以独立地接收含有不同类型的数据结构。我们可以通过发送消息来避免命名管道的同步和阻塞问题。但是消息队列与命名管道一样,每个数据块都有一个最大长度的限制,Linux用宏MSGMAX和MSGMNB来限制一条消息的最大长度和一个队列的最大长度。2、消息队列需原创 2017-02-17 11:56:25 · 9465 阅读 · 0 评论 -
linux c之通过管道实现兄弟间进程通信:
1、兄弟间进程通信: 父进程创建管道,并使用fork函数创建2个进程,在第一个子进程发消息到第二个子进程,第2个子进程读取消息并处理,在父进程中不使用管道通信,所以什么都不做,直接关闭管道两端并退出2、代码实现3、结果展示父进程在第一个子进程时并没有关闭管道两端,而是创建第二个进程之后才关闭,才关闭管道,子进程可以继承存活的管原创 2017-02-10 17:47:58 · 4638 阅读 · 0 评论 -
linux c之通过管道父子进程实现同步通信
1、父进程向子进程写数据 进程的概念和父进程向子进程写数据,我们之前有一片博客介绍过 http://blog.csdn.net/u011068702/article/details/54914774 linux c之管道的介绍、创建关闭和简单读写(父进程向子进程写入数据)2、父子进程实现同步通信的关系图 关系图片:原创 2017-02-14 17:14:22 · 5012 阅读 · 0 评论 -
linux c之用命名管道实现进程通信
1、命名管道相关信息介绍不是很了解命名管道先看这个篇博客 http://blog.csdn.net/u011068702/article/details/55102379 linux c之命名管道简单使用 博客介绍了创建管道的方法,这里还需要介绍 open函数和调用阻塞FIFO文件也可以使用open调用来打开,mkfifo函数只是创建一个FIFO文件,要使用命名管道还是将其打开原创 2017-02-15 18:06:04 · 3851 阅读 · 0 评论 -
linux c之使用共享内存实现进程间通信
这篇博客有别人的也有自己改的,作为读书笔记,勿喷。1、共享内存的介绍共享内存就是允许两个不相关的进程访问同一个逻辑内存。共享内存是在两个正在运行的进程之间共享和传递数据的一种非常有效的方式。不同进程之间共享的内存通常安排为同一段物理内存。进程可以将同一段共享内存连接到它们自己的地址空间中,所有进程都可以访问共享内存中的地址,就好像它们是由用C语言函数malloc分配的内存一样。而如果某原创 2017-02-21 22:24:27 · 9552 阅读 · 0 评论 -
linux之进程间通信--使用信号
一、什么是信号用过Windows的我们都知道,当我们无法正常结束一个程序时,可以用任务管理器强制结束这个进程,但这其实是怎么实现的呢?同样的功能在Linux上是通过生成信号和捕获信号来实现的,运行中的进程捕获到这个信号然后作出一定的操作并最终被终止。信号是UNIX和Linux系统响应某些条件而产生的一个事件,接收到该信号的进程会相应地采取一些行动。通常信号是由一个错误产生的。但它们转载 2017-02-20 21:15:14 · 2474 阅读 · 0 评论 -
linux c之解决array subscript is not integer和AF_NET not undeclared
1、array subscript is not integer 我一开始写的代码是这样的写的 buf[strlen[buf] - 1] = '\0'; 很明显写错了,以后不要再犯这样的错误了,切记 buf[strlen(buf) - 1] = '\0';2、AF_NET not undeclared原创 2017-03-08 14:54:15 · 10640 阅读 · 0 评论 -
linux c之access方法介绍
1、函数介绍access函数检查调用进程是否可以对指定的文件执行某种操作api:int access(const char * pathname, int mode) athname:需要检测的文件路劲名mode:需要测试的操作模式mode参数介绍:R_OK测试读许可权W_OK测试写许可权X_OK测试执行许可权F_原创 2017-02-15 09:38:08 · 5666 阅读 · 2 评论 -
linux c之命名管道简单使用
1、介绍FIFO(命名管道) 管道有局限性,只能在具有亲缘关系的进程间通信,但是命名管道克服了这个问题,可以实现无亲缘关系的进程之间的通信API介绍: /* FIFO 命名管道 */ /* * 函数功能:功能和管道类似; * 返回值:若成功则返回0,若出错则返回-1; * 函数原型: */原创 2017-02-14 17:38:34 · 4238 阅读 · 0 评论 -
linux c之assert函数使用总结
1、assert函数介绍assert宏的原型定义在中,其作用是如果它的条件返回错误,则终止程序执行,原型定义:#include void assert( int expression );assert的作用是现计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用 abort 来终止程序运行:2原创 2017-03-14 10:11:51 · 4374 阅读 · 0 评论 -
linux c之STDIN_FILENO的作用及与stdin的区别
1.STDIN_FILENO的作用STDIN_FILENO属于系统API接口库,其声明为 int 型,是一个打开文件句柄,对应的函数主要包括 open/read/write/close 等系统级调用。操作系统一级提供的文件API都是以文件描述符来表示文件。STDIN_FILENO就是标准输入设备(一般是键盘)的文件描述符。2.区别1)数据类型不一致:stdi原创 2017-03-15 11:16:00 · 4041 阅读 · 0 评论 -
linux c之gcc编译出现error:lvalue required as unary ‘&‘ operand解决办法
1、问题 今天搞epoll实现io复用的时候gcc编译出现这个错误lvalue required as unary '&' operand,如下图2、解决办法 accept函数参数如下int accept(int sockfd,struct sockaddr *addr,socklen_t *addrlen);在第三个参数为了原创 2017-03-16 15:21:47 · 31393 阅读 · 0 评论 -
linux c之判断字符串是不是以另一字符串开始或者结尾
1 问题判断字符串是不是以另一字符串开始或者结尾2 代码实现#include <stdio.h>#include <string.h>/** *判断是字符串str是不是以start开始 */int is_start_with(const char *str, char *start){ if (NULL ==...原创 2019-07-24 22:03:11 · 5721 阅读 · 0 评论 -
linux之errno值为104(connetction reset by peer)
1 问题往fd里面写(write方法)入数据的时候出错,返回小于等于0的值,然后这个时候打印errno值是1042 分析errno是104就是connetction reset by peer,表明在对一个对端socket已经关闭的的连接调用write或send方法,在这种情况下,调用write或send方法后,对端socket便会向本端socket发送一...原创 2019-07-10 21:58:43 · 18856 阅读 · 0 评论 -
linux c之gcc -g file.c -o file提示warning: no newline at end of file
1 问题编译c文件的时候,命令如下gcc -g file.c -o file错误提示如下warning: no newline at end of file2 解决办法原因:源文件的最后一行没有回车符造成我们用vim编辑文件,然后到文件最后一行回车就行vi和vim操作,调到最后一行命令如下G...原创 2019-05-14 20:01:37 · 2602 阅读 · 0 评论 -
Makefile的学习
1 Makefile就这样理解,帮我们对程序进行编译,我们每次gcc g++啥的很麻烦2举例子我这里有3个文件first.c second.c third.cfirst.c文件如下#include <stdio.h>int add(int a, int b){ return a;}second.c文件如下int sub(...原创 2019-04-30 15:47:14 · 2184 阅读 · 0 评论 -
linux c之memcpy拷贝结构体到结构体、拷贝字符数组到结构体
1 memcpy我们知道这个函数主要是拷贝内存数据,我们一般可以使用拷贝结构体到结构体、也可以拷贝字符数组到结构体,但是这个字符数组数据应该是同一个结构体拷贝先拷贝到这个字符数组,如果是其他格式的字符数组,这样拷贝就有问题。2测试代码#include <stdio.h>#include <string.h>typedef ...原创 2019-04-28 02:43:15 · 10590 阅读 · 0 评论 -
linux c之通过popen执行shell命令
1popen介绍我是在ubuntu上面进行man popen的,解释如下这个函数通过创建一个管道通过fork一个进程,然后执行一个command,因为在管道中,所以数据流是单向的,然后type一般只能是读“r”或者写“w”,返回值在IO流里面,用了popen之后我们要记得用pclose函数。2 使用#include <s...原创 2019-04-16 22:59:37 · 4832 阅读 · 0 评论 -
linux c之把最简单的字符串数据追加写入文件
1 问题把最简单的字符串数据追加写入文件2 代码实现#include <stdio.h>#include <string.h>void write_data_to_file(const char *path, char *str){ FILE *fd = fopen(path, "a+"); if (fd == NULL) ...原创 2018-12-26 18:26:45 · 9708 阅读 · 4 评论 -
linux之安装boost环境
1 下载最新的boost代码包网址www.boost.org,如果觉得网速很慢,你可以直接在别人的csdn那里去下载地址:https://download.csdn.net/download/weixin_42404995/10508611,我这里就是用的这个boost_1_67_0.tar.gz2 安装boost环境1) 解压boost_1_67_0....原创 2018-11-05 22:15:42 · 4179 阅读 · 0 评论 -
linux c之动态打开链接库(dlopen dlsym dlclose)
1 linux提供了加载和处理动态链接库的系统调用2 主要函数1) dlopen、 dlopen以指定模式打开指定的动态连接库文件,并返回一个句柄给调用进程,打开模式如下:RTLD_LAZY 暂缓决定,等有需要时再解出符号RTLD_NOW 立即决定,返回前解除所有未决定的符号。2) dlsym、 dlsym通过句柄和连接符名称获取函数名或者变量名...原创 2018-09-06 21:39:12 · 3750 阅读 · 0 评论 -
Linux c之函数手册
Linux c函数手册查阅地址http://man.chinaunix.net/develop/c&c++/linux_c/default.htm原创 2018-03-05 15:00:02 · 3423 阅读 · 0 评论 -
linux c之在终端如何依赖.o文件(静态链接库)运行C文件的命令
1、问题比如在linux的终端,我们运行有个aa.c文件,但是这个这C文件又依赖.o文件,之前我不知道怎么运行,今天才知道,直接放后面就行了2、命令如下gcc -g aa.c ***.o -o aa如果有线程记得加上phreadgcc -g aa.c ***.o -o aa -phread原创 2017-12-02 21:29:28 · 5058 阅读 · 0 评论 -
linux之用openssl命令Base64编码解码、md5/sha1摘要、AES/DES3加密解密
1、我们先看openssl help命令会输出什么?2、我们用openssl命令实现字符串和文本的Base64编码和解码openssl base64 openssl base64 -d3、我们用openssl命令实现字符串和文本的md5/sha1摘要4、o原创 2017-08-11 23:00:54 · 6804 阅读 · 0 评论 -
linux之nautilus .命令浏览当前文件目录
1、比如我们在终端目前想打开这个路径下的文件目录,我们如果再去更加路径一个一个的打,就太浪费时间了,我们可以在终端这个路径下输入下面的命令就可以~/Desktop$ nautilus .2、效果如下图原创 2017-06-22 18:02:18 · 4688 阅读 · 0 评论 -
C语言之rand()和srand()函数
1、rand()、srand()函数介绍srand 初始化随机种子,rand 产生随机数定义函数:int rand(void)函数功能:产生随机数函数说明:rand的内部实现是用线性同余法做的,不是真的随机数,因为其周期特别长,一定的范围里可看成是随机的。rand()会返回一随机数值,范围在0至RAND_MAX 间。在调用此函数产生随机数前,必须用srand()设好随机数种子,如果原创 2017-05-22 23:11:20 · 3842 阅读 · 0 评论 -
linux c之通过popen和pclose函数创建管道执行shell 运行命令使用总结
1、函数介绍popen 和 pclose 函数 操作是创建一个管道链接到另一个进程,然后读其输出或向其输入端发送数据。标准 I/O 库提供了两个函数popen 和 pclose 函数,这两个函数实现的操作是:创建一个管道,调用 fork 创建一个子进程,关闭管道的不使用端,执行一个 shell 以运行命令,然后等待终止。API /* popen 和 pc原创 2017-02-14 15:32:25 · 5147 阅读 · 0 评论 -
linux c之管道的介绍、创建关闭和简单读写(父进程向子进程写入数据)
1、管道介绍、 进程间通信的几种主要手段中。其中管道和有名管道是最早的进程间通信机制之一,管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具 有管道所具有的功能外,它还允许无亲缘关系进程间的通信。2、管道特点、 管道是半双工的,数据只能向一个方向流动;需要双方通信时,需要建立起两个管道; 只能用于父子进程原创 2017-02-07 20:01:25 · 10064 阅读 · 0 评论 -
linux之修改dns以及用netmask修改ip和网关
1、介绍netmask netmaks可以在 IP范围、子网掩码、cidr、cisco等格式中互相转换,并且提供了IP地址的点分十进制、16进制、8进制、2进制之间的互相转换!2、安装netmask sudo apt-get install netmask3、修改ip把ip修改成192.168.1.18ifconfig eth原创 2017-02-09 20:28:52 · 4647 阅读 · 0 评论 -
linux c之用fopen、fputs、fgets、 fseek来对文件进行写、替换、读
1、函数说明1、fgets#include char *fgets(char *s, int size, FILE *stream);功能:从文件流读取一行,送到缓冲区,使用时注意以下几点: 返回值:成功时s指向哪返回的指针就指向哪,出错或者读到文件末尾时返回NULL2、fputs#includeint fputs(cons原创 2017-01-09 20:47:31 · 12451 阅读 · 0 评论 -
linux c通过文件描述符以及write和read方法对文件进行读写
1、write和read方法讲解#includessize_t read(int fd, void *buf,size_t count);fd为文件描述符,buf缓冲区指针,count表示要读取的字节数返回:读到的字节数,若已经到文件尾端返回0,出错返回-1#includessize_t write (int fd, void *buf, size_t count);原创 2017-01-09 20:24:33 · 12091 阅读 · 1 评论 -
linux c之wait和waitpid函数的用法和总结
1、wait和waitpid函数的介绍 1) wait()函数用于使父进程(也就是调用wait()的进程)阻塞,直到一个子进程结束或者该进程接收到了一个指定的信号为止。如果该父进程没有子进程或者它的子进程已经结束,则wait()函数就会立即返回。 2) waitpid()的作用和wait()一样,但它并不一定要等待第一个终止的子进程(它可以指定需要等待终止的原创 2017-01-13 17:56:56 · 31454 阅读 · 2 评论 -
linux c之#include <unistd.h> 总结
1、解释unistd解释为unix 标准的输入输出2、常用函数主要函数是文件的读、写、得到进程的idssize_t read(int, void *, size_t); // 读取文件使用int unlink(const char *);ssize_t write(int, const void *, size_t); // 写文件原创 2017-01-09 10:03:46 · 6401 阅读 · 0 评论 -
linux c用open打开(创建)一个文件
1、文件描述符Linux操作系统内核(kernel)利用文件描述符来访问文件,文件描述符大于等于0,是一个用户描述被打开文件的索引值,它指向该文件的相关信息记录表,当文件打开或者创建新文件的时,就会返回一个文件描述符,当读写文件时,也需要使用文件描述符来指定特写文件。2、讲解open函数文件需要先打开或则创建如果返回是-1, 则出错,如果成功,则返回文件描述符第一个原创 2017-01-07 17:18:25 · 42490 阅读 · 2 评论