Linux程序设计
文章平均质量分 57
ToBeGeek
Geek
展开
-
exit( )函数与return的区别
return:表示函数返回,当main函数return时表示程序运行结束.exit():无论在哪个函数调用,都会导致程序结束。原创 2016-06-09 09:35:45 · 348 阅读 · 0 评论 -
函数指针的使用
用途:从数据层主动向GUI层更新数据Object-C 的代理Qt信号槽对象间通讯的一种机制原创 2016-07-17 15:45:52 · 234 阅读 · 0 评论 -
获取进程默认可以打开的最大文件描述符数
实现文件://max_fd_cnt.h#ifndef _OPEN_MAX#define _OPEN_MAXlong open_max(void);#endif//max_fd_cnt.c#include "max_fd_cnt.h"#include <errno.h>#include <limits.h>#include <unistd.h>#include <stdio.h>#i原创 2016-08-02 00:04:45 · 1404 阅读 · 0 评论 -
vim中显示和关闭行号
复制vim中的内容时,会把行号也复制进去,如果我们不想复制行号,可以先关闭行号,然后再复制。在命令模式下(按esc键)://关闭行号:set nonumber//开启行号:set number原创 2016-08-02 00:14:04 · 60137 阅读 · 2 评论 -
为路径动态的分配空间
实现文件: 注意:分配的空间需要自行释放。//path_size.h#ifndef _PATH_SIZE#define _PATH_SIZEchar *path_alloc(size_t *sizep);#endif//path_size.c#include <stdio.h>#include <errno.h>#include <limits.h>#include <unistd原创 2016-08-02 10:19:14 · 409 阅读 · 0 评论 -
多线程临界区问题及解决方法
临界区定义:函数内同时运行多个线程时引起的,由多条语句构成的代码块。 当多个线程对同一块内存空间进行操作时,就有可能产生临界区问题。下面先看一个例子:#include <stdio.h>#include <unistd.h>#include <stdlib.h>#include <pthread.h>#define NUM_THREAD 100void *thread_inc(void *原创 2016-08-08 13:15:44 · 6373 阅读 · 0 评论 -
对象的创建与引用计数器实现
在面向对象的编程语言中,很多语言会根据引用计数器来实现对对象的自动回收机制,就和Unix/Linux中的文件系统那样,当一个对象被另一个对象持有时,被持有的对象自身的引用计数器会加1。只要对象还被引用,即引用计数器还未被清0,那么我们对对象执行释放操作,只是将对象的引用计数器减1。直到对象的引用计数器变为0后,该对象才真正被释放。下面我们根据以上描述的原理,用C来尝试实现对象的创建、引用和释放。#i原创 2016-08-13 18:21:44 · 971 阅读 · 0 评论 -
创建线程
线程的创建#include < pthread. h>int pthread_ create( pthread_ t *restrict tidp, const pthread_ attr_ t *restrict attr, void *(*start_ rtn)( void *), void *restrict arg);//若成功,返回0;否则,返回错误编码如...原创 2018-03-30 16:18:49 · 164 阅读 · 0 评论 -
线程的终止
线程终止进程的终止:1.进程中的任意线程调用了exit、_Exit 或者 _exit,那么整个进程就会终止。 2.如果默认的动作是终止进程,那么发送到线程的信号也会终止整个进程。线程的终止:在不终止进程的情况下停止单个线程: 1.线程可以从启动例程中返回(return),返回值是线程的退出码。 2.线程可以被同一进程中的其他线程取消。 3.线程调用pthread_e...原创 2018-03-30 17:13:33 · 329 阅读 · 0 评论 -
线程同步(读写锁)
线程同步(读写锁)读写锁读写锁(reader-writer lock)与互斥量类似,不过读写锁允许更高的并行性。 互斥量要么是锁住状态,要么就是不加锁状态,而且一次只有一个线程可以对其加锁。 读写锁可以有3种状态: 1、读模式下加锁状态 2、写模式下加锁状态 3、不加锁状态读写锁特点:一次只有一个线程可以占有写模式的读写锁,但是多个线程可以同时占有读模式的读写锁...原创 2018-04-07 15:07:58 · 781 阅读 · 0 评论 -
线程同步(条件变量)
线程同步(条件变量)条件变量是线程的另一种同步机制。 条件变量与互斥量一起使用时,允许线程以无竞争的方式等待特定的条件发生。 条件本身是由互斥量保护的。线程在改变条件状态之前必须首先锁住互斥量。其他线程在获得互斥量之前不会察觉到这种改变,因为互斥量必须在锁定以后才能计算条件。使用条件变量前,必须先对它进行初始化。条件变量的数据类型为pthread_cond_t。它有两种初始化方式: ...原创 2018-04-08 09:10:09 · 1112 阅读 · 0 评论 -
线程同步(屏障)
线程同步(屏障)屏障(barrier)是用户协调多个线程并行工作的同步机制。屏障允许每个线程等待,直到所有的合作线程都达到某一点,然后从该点继续执行。pthread_join函数就是一种屏障,允许一个线程等待,直到另一个线程退出。但是屏障对象的概念更广,它们允许任意数量的线程等待,直到所有的线程完成处理工作,而线程不需要退出。所有线程达到屏障后可以接着工作。可以使用pthread_ba...原创 2018-04-08 16:36:17 · 2471 阅读 · 0 评论 -
二级指针的使用
有时候,我们需要在函数体的内部申请内存空间并初始化,然后将内部申请的存储空间交付给外部指针来引用,这时候,我们可以使用二级指针作为申请空间的函数的参数来实现。原创 2016-07-17 15:24:41 · 690 阅读 · 0 评论 -
结构体对齐预处理指令
结构体预处理指令的使用原创 2016-07-17 15:22:57 · 457 阅读 · 0 评论 -
Ubuntu 16.04系统默认最大打开文件数为1024个
代码证明#include <stdio.h> 2 #include <sys/types.h> 3 #include <fcntl.h> 4 #include <stdlib.h> 5 #include <unistd.h> 6 7 int main(int argc,char *argv[]){ 8 9 int fd; 10 char name原创 2016-06-08 22:39:56 · 7924 阅读 · 0 评论 -
C实现复制文件
代码//mycp.c 1 #include <unistd.h> 2 #include <sys/stat.h> 3 #include <sys/types.h> 4 #include <fcntl.h> 5 #include <stdio.h> 6 #include <stdlib.h> 7 8 #define SIZE 8192 9 10 int main原创 2016-06-09 10:32:11 · 1096 阅读 · 0 评论 -
解决vi中上下左右变ABCD问题
只要依次执行以下两个命令即可完美解决Ubuntu下vi编辑器方向键变字母的问题。$sudo apt-get remove vim-common$sudo apt-get install vim原创 2016-06-09 14:59:23 · 2509 阅读 · 0 评论 -
Ubuntu网络配置
配置 /etc/network/interfaces 文件动态获取IP$sudo vim /etc/network/interfaces添加如下内容:auto eth0iface eth0 inet dhcp重启网卡$sudo service networking restart静态IP$sudo vim /etc/network/interfaces添加如下内容:auto eth原创 2016-06-09 14:49:55 · 220 阅读 · 0 评论 -
使Vim更适合编代码
方式一:在.vimrc中添加以下代码后,重启vim即可实现按TAB产生4个空格:set ts=4 (注:ts是tabstop的缩写,设TAB宽4个空格)set expandtab对于已保存的文件,可以使用下面的方法进行空格和TAB的替换:TAB替换为空格::set ts=4:set expandtab:%retab!空格替换为TAB::set ts=4:set noexpandta原创 2016-06-08 21:58:36 · 272 阅读 · 0 评论 -
共享库
这里首先先说明一下装载时重定位的问题,一个程序如果没有用到任何动态库,由于已经知道了所有的代码,那么装载器在把程序载入内存的过程中就可以直接安装静态库在链接的时候定好的代码段位置直接加载进内存中的对应位置就可以了。 但是在面对动态的库的时候 ,这种方式就不行了。假设需要载入共享库A,但是在编译链接的时候使用的共享库和最后运行的不一定是同一个库,在编译期就没办法知道具体的库长度,在链接的时候就没原创 2016-06-13 01:15:48 · 284 阅读 · 0 评论 -
静态库
静态库可以认为是一些目标代码的集合,即对多个目标代码归档到一个文件中。命名一般以”lib“开头,以”.a“结尾,如“libmycal.a”。静态库相比于动态库存在的优点是:引用了静态库的代码进行编译链接后,会将静态库的副本包含进应用程序中,这样在别的机器上运行时,就不用担心找不到库了。缺点就是:当多个应用程序调用相同的静态库时,内存中会有多个静态库的副本被载入,每个库归相应的应用程序调用,消耗内存。原创 2016-06-14 09:23:17 · 246 阅读 · 0 评论 -
查看手册man命令后面的参数选择
man n function_name如 man 3 fopen,man 3 exit1、Standard commands (标准命令)2、System calls (系统调用)3、Library functions (库函数)4、Special devices (设备说明)5、File formats (文件格式)6、Games and toys (游戏和娱乐)7、Miscellaneous (原创 2016-07-24 14:59:27 · 1943 阅读 · 0 评论 -
gdb调试程序1
gdb 基本命令 命令 描述 backtrace ( 或bt ) 查看各级函数调用及参数 finish 连续运行到当前函数返回为止,然后停下来等待命令 frame (或 f) 帧编号 选择栈帧 info (或 i) locals 查看当前栈帧局部变量的值 list (或 l) 列出源代码,接着上次的位置往下列,每次列10行 list 行号 列出从第原创 2016-06-18 01:59:36 · 819 阅读 · 0 评论 -
gdb调试程序2
gdb 基本命令 命令 描述 break ( 或b ) 行号 在某一行设置断点 break 函数名 在某个函数开头设置断点 break … if … 设置条件断点 continue (或 c) 从当前位置开始连续运行程序 delete breakpoints 断点号 删除断点 display 变量名 跟踪查看某个变量,每次停下来都显示它的值 d原创 2016-06-18 12:05:08 · 322 阅读 · 0 评论 -
gdb调试程序3
gdb 基本命令3 命令 描述 watch 设置观察点 info ( 或 i ) watchpoints 查看当前设置了哪些观察点 x 从某个位置开始打印存储单元的内容,全部当成字节来看,而不区分哪个字节属于哪个变量接着上次的内容:修改后的代码 1 #include <stdio.h> 2 3 int main(void) 4 { 5 6原创 2016-06-18 22:54:04 · 361 阅读 · 0 评论 -
线程同步(互斥量)
线程同步(互斥量)互斥量原理:使用pthread的互斥接口来保护数据,确保同一时间只有一个线程访问数据。互斥量从本质上说是一把锁,在访问共享资源前对互斥量进行设置(加锁),在访问完成后释放互斥量(解锁)。对互斥量进行加锁后,其他任何线程试图对互斥量进行再次加锁都会被阻塞,直到当前线程释放该互斥量。如果释放互斥量时,存在多个线程在阻塞等待,那么所有该锁上的阻塞线程都会变成...原创 2018-04-06 17:19:06 · 389 阅读 · 0 评论