linux应用程序编程
文章平均质量分 62
茜茜她老爹
一切随缘!!
展开
-
【无标题】
这种通过改变函数指针 s_cal 的值,让函数 test2_cal() 执行不同功能的特性,可以称之为重定义了test2_cal()的功能。默认的情况下,它仅调用 cal_sum 和 cal_sub两个函数,通过函数 my_cal_calculate_register()可以增加它调用的函数,示例中 my_cal_calculate_register(cal_mul);引言:在上一篇详解C语言中回调函数的含义与使用场景[1]中介绍了回调函数的概念与使用方法,本节将深入地介绍回调函数典型的使用场景。转载 2022-10-28 15:10:30 · 199 阅读 · 1 评论 -
C语言获取当前的时间,秒,毫秒,纳秒
#include<stdio.h>#include<sys/time.h>int main(){ struct timeval time_now = {0}; long time_sec = 0;//秒 long time_mil = 0;//1毫秒 = 1秒/1000 long time_mic = 0;//1微秒 = 1毫秒/1000gettimeofday(&time_now,NULL);&n原创 2022-05-27 16:49:27 · 4317 阅读 · 0 评论 -
Linux Ubuntu 20.04 —添加开机启动(服务/脚本)
Linux Ubuntu 20.04 —添加开机启动(服务/脚本)系统启动时需要加载的配置文件/etc/profile、/root/.bash_profile/etc/bashrc、/root/.bashrc/etc/profile.d/*.sh、/etc/profile.d/lang.sh/etc/sysconfig/i18n、/etc/rc.local(/etc/rc.d/rc.local)一、修改开机启动文件:/etc/rc.local(或者/etc/rc.d/rc.local)转载 2021-09-17 10:19:38 · 2153 阅读 · 0 评论 -
linux获取时间函数介绍
asctime(将时间和日期以字符串格式表示)相关函数time,ctime,gmtime,localtime表头文件#include定义函数char * asctime(const struct tm * timeptr);函数说明asctime()将参数timeptr所指的tm结构中的信息转载 2016-03-29 15:28:03 · 380 阅读 · 0 评论 -
pthread_cond_timedwait 实例
linux多线程编程,你还在用sleep么?用pthread_cond_timedwait吧摘要:多线程编程中,线程A循环计算,然后sleep一会接着计算(目的是减少CPU利用率);存在的问题是,如果要关闭程序,通常选择join线程A等待线程A退出,可是我们必须等到sleep函数返回,该线程A才能正常退出,这无疑减慢了程序退出的速度。当然,你可以terminate线程A,但这样转载 2015-10-26 10:04:12 · 716 阅读 · 0 评论 -
linux线程分离状态
在任何一个时间点上,线程是可结合的(joinable),或者是分离的(detached)。一个可结合的线程能够被其他线程收回其资源和杀死;在被其 他线程回收之前,它的存储器资源(如栈)是不释放的。相反,一个分离的线程是不能被其他线程回收或杀死的,它的存储器资源在它终止时由系统自动释放。 线程的分离状态决定一个线程以什么样的方式来终止自己。在默认情况下线程是非分离状态的,这转载 2015-08-06 12:57:00 · 409 阅读 · 0 评论 -
分离线程
pthread_t createthread(void* (*fun)(void *),void *arg){ pthread_t threadId; pthread_attr_t attr; memset(&attr,0,sizeof(attr)); pthread_attr_init(&attr); pthread_attr_setdetachstate(&attr,P转载 2015-06-29 11:32:31 · 362 阅读 · 0 评论 -
消息队列讲解
需要包含头文件#include #include #include 此外,其中msg一共提供四种操作函数,msgget, msgsnd, msgrcv,msgctlmsgget是用来得到消息队列的标识符或者创建消息队列消息队列一旦创建除非显示删除或者重启机器,否则将一直存在在命令行下使用ipcs这个命令可以查看当前有哪些消息队列存在,用ipcrm可以转载 2015-06-29 11:45:43 · 817 阅读 · 0 评论 -
linux下创建守护进程(daemon process)
#include #include #include #include #include #include #include #include void my_daemon() { int pid, fd; // 1.转变为后台进程 if ((pid = for转载 2015-06-08 15:34:23 · 539 阅读 · 0 评论 -
消息队列的读写
#include #include #include #include #include #include #include struct message{long int messagetype;char text[BUFSIZ];} messagebuf; int x;int y;long int m转载 2015-06-29 11:17:19 · 1274 阅读 · 0 评论 -
linux命令之sync
linux命令之syncsync是一个linux同步命令,含义为迫使缓冲块数据立即写盘并更新超级块。其中包含已修改的 i-node、已延迟的块 I/O 和读写映射文件。[wang@localhost usb]$ man syncNAME sync - flush file system buffersSYNOPSIS sy转载 2015-10-28 10:09:29 · 480 阅读 · 0 评论 -
Linux多线程——使用信号量同步线程
信号量、同步这些名词在进程间通信时就已经说过,在这里它们的意思是相同的,只不过是同步的对象不同而已。但是下面介绍的信号量的接口是用于线程的信号量,注意不要跟用于进程间通信的信号量混淆,关于用于进程间通信的信号量的详细介绍可以参阅我的另一篇博文:Linux进程间通信——使用信号量。相似地,线程同步是控制线程执行和访问临界区域的方法。一、什么是信号量线程的信号量与进程间通信转载 2016-01-06 11:38:29 · 416 阅读 · 0 评论 -
回调函数的高级用法
typedef void (*halCBack_t) (uint8 keys, uint8 state); //指针函数,注意加了自定义typedef后,下面才能重命名void KeyCallback ( uint8 keys, uint8 state ); //具体实现函数void LEDCallback ( uint8 keys, uint8 state ); //具体实现函数转载 2016-01-26 16:49:19 · 1262 阅读 · 0 评论 -
do {...} while (0) 的用途汇总(欢迎补充)
在一些Linux内核和其它的开源代码中,我们经常看到像下面这样的代码:123do{ ... }while(0)该代码片段并非循环,这样想想似乎使用do…while没有任何意义,那么为什么还要使用它呢?实际上,do{...}while(0)的用途并不仅仅是优转载 2016-05-12 15:26:38 · 362 阅读 · 0 评论 -
SIGTERM SIGINT
SIGHUP 终止进程 终端线路挂断SIGINT 终止进程 中断进程SIGQUIT 建立CORE文件终止进程,并且生成core文件SIGILL 建立CORE文件 非法指令SIGTRAP 建立CORE文件 跟踪自陷SIGBUS 建立CORE文件 总线错误SIGSEGV 建立CORE文件转载 2016-10-27 16:05:03 · 524 阅读 · 0 评论 -
linux scandir 的使用
关于我成长中的鱼成长中的鱼。 加博友 关注他 文章分类·面试(1)·心情随笔(0)·Linux常用命令总结(2)·应用层协议(2)·加密算法(1)·Linux进程间通信(1)·计算机系统(1)·Linux相关(28)·更多 >注册免费冲印20张照片LOF转载 2016-12-08 15:44:09 · 1893 阅读 · 0 评论 -
C语言中如何计算时间差 秒
1、获取时间用time_t time( time_t * timer ),计算时间差使用double difftime( time_t timer1, time_t timer0 )。 精确到秒。测试程序如下:12345678910111213#include #include int转载 2017-04-01 17:37:58 · 10101 阅读 · 0 评论 -
tcp传输图片(发送端使用sendfile函数)
客户端client向服务器server发送一幅图片,使用tcp传输: 服务器代码:#include sys/socket.h>#include sys/types.h>#include stdlib.h>#include stdio.h>#include string.h>#include unistd.h>#in转载 2017-06-21 18:18:53 · 4375 阅读 · 0 评论 -
linux下使用socket传图片
server端:#include stdio.h>#include stdlib.h>#include string.h>#include sys/socket.h>#include sys/types.h>#include netinet/in.h>//sockaddr_in#define PORT 6675int main()转载 2017-06-21 18:19:59 · 2813 阅读 · 0 评论 -
linux 消息队列实例
前言: 消息队列就是一个消息的链表。可以把消息看作一个记录,具有特定的格式以及特定的优先级。对消息队列有写权限的进程可以向其中按照一定的规则添加新消息;对消息队列有读权限的进程则可以从消息队列中读走消息函数:1.创建新消息队列或取得已存在消息队列原型:int msgget(key_t key, int msgflg);参数: ke转载 2015-06-04 17:43:32 · 371 阅读 · 0 评论 -
Linux的sleep()和usleep()的使用和区别
函数名: sleep 头文件: #include // 在VC中使用带上头文件 #include // 在gcc编译器中,使用的头文件因gcc版本的不同而不同 功 能: 执行挂起指定的秒数 语 法: unsigned sleep(unsigned seconds);示例: #include #include int main() {转载 2015-06-25 10:05:43 · 605 阅读 · 0 评论 -
linux 下基于特定通信协议利用多线程同步通信机制实现的串口通信
"code" class="cpp">/** *@Title:利用多线程同步通信机制实现串口通信 *@Introduce:主要完成根据特定的通信协议实现串口与PC上特定串口 * 通信软件的通信。测试版,只是完成主要框架,没有完全将协议的 * 所有通信方式方法做完。 * 其中包含的测试功能有:监听主机(PC上的软件)发送的特定请求, * 能够识别类型,并解转载 2015-04-28 10:51:16 · 719 阅读 · 0 评论 -
Linux下的动态链接库和静态链接库
Linux中有两类函数库,分别是静态库和动态库。静态函数库:这类库的名字一般是libxxx.a;利用静态函数库编译成的文件比较大,因为整个函数库的所有数据都会被整合进目标代码中,他的优点就显而易见了,即编译后的执行程序不需要外部的函数库支持,因为所有使用的函数都已经被编译进去了。当然这也会成为他的缺点,因为如果静态函数库改变了,那么你的程序必须重新编译。动态转载 2015-01-20 11:08:36 · 570 阅读 · 0 评论 -
linux多线程学习(六)——信号量实现同步。
信号量的互斥同步都是通过PV原语来操作的,我们可以通过注册两个信号量,让它们在互斥的问题上互动,从而达到同步。通过下面实例就可以很容易理解: [cpp] view plaincopy#include #include #include #include #include #i转载 2015-01-20 17:15:19 · 476 阅读 · 0 评论 -
linux下 线程属性常用操作
在linux中,可以使用pthread_attr_t结构修改线程默认属性,并把这些属性与创建的线程联系起来。首先调用pthread_attr_init初始化pthread_attr_t结构,使pthread_attr_t结构所包含的内容就是操作系统实现支持的线程所有属性的默认值。然后,可以调用其他函数对想修改的个别属性进行修改。1.线程属性的初始化(若对属性操作,必先初始化),去初始化。转载 2015-01-20 16:16:18 · 483 阅读 · 0 评论 -
Linux系统下的多线程编程-条件变量&信号量
条件变量 使用互斥锁来实现线程间数据的共享和通信,互斥锁一个明显的缺点是它只有两种状态:锁定和非锁定。而条件变量通过允许线程阻塞和等待另一个线程发送信号的方法弥补了互斥锁的不足,它常和互斥锁一起使用。使用时,条件变量被用来阻塞一个线程,当条件不满足时,线程往往解开相应的互斥锁并等待条件发生变化。一旦其它的某个线程改变了条件变量,它将通知相应的条件变量唤醒一个或多个正被此条件变量阻塞的线程转载 2015-01-20 15:23:47 · 533 阅读 · 0 评论 -
结构体字节的对齐
#progma pack (1) /*指定按1字节对齐*/原创 2015-01-15 18:17:47 · 524 阅读 · 0 评论 -
linux获取时间程序
#include int main(void){char *wday[]={"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};time_t timep;struct tm *p;time(&timep);//p=gmtime(&timep);p = localtime(&timep);printf(" %d-%d-%原创 2015-01-16 15:04:08 · 440 阅读 · 0 评论 -
GDB调试程序
用GDB调试程序GDB概述————GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。所谓“寸有所长,尺有所短”就是这个道理。一般来说,GDB主要帮忙你完成下面四个方面的功能:转载 2015-01-16 16:06:50 · 634 阅读 · 0 评论 -
linux打印时间的code
1、struct timeval tv[2]; struct timezone tz[2];原创 2014-09-12 10:55:58 · 596 阅读 · 0 评论 -
C语言执行Linux的shell命令并获得返回值
popen函数执行命令后,返回一个指向该命令输出的文件句柄,接下来就可以用fgets等文件操作函数去读取输出结果。[cpp] view plaincopyprint?#include FILE *popen(const char *command, const char *type); int pclose(FILE *转载 2014-08-30 09:49:44 · 657 阅读 · 0 评论 -
Linux 线程同步的三种方法
线程的最大特点是资源的共享性,但资源共享中的同步问题是多线程编程的难点。linux下提供了多种方式来处理线程同步,最常用的是互斥锁、条件变量和信号量。一、互斥锁(mutex)通过锁机制实现线程间的同步。初始化锁。在Linux下,线程的互斥量数据类型是pthread_mutex_t。在使用前,要对它进行初始化。静态分配:pthread_mutex_t mutex = PTHR转载 2015-01-04 15:08:43 · 423 阅读 · 0 评论 -
进程ipc和线程通信
一、互斥与同步1.互斥:是指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。但互斥无法限制访问者对资源的访问顺序,即访问是无序的。2.同步:是指在互斥的基础上(大多数情况),通过其它机制实现访问者对资源的有序访问。在大多数情况下,同步已经实现了互斥,特别是所有写入资源的情况必定是互斥的。少数情况是指可以允许多个访问者同时访问资源.3.同步是一种更为复杂的互斥,转载 2015-01-20 10:25:12 · 516 阅读 · 0 评论 -
使用dup和dup2重定向和还原
使用dup和dup2重定向和还原 源于开发一个应用将数据写的设备节点中,但是设备节点具有可变性,所以不在写死,而是先确定好,打开fd再将内容写进去,最终写入fd中的是一个开源程序,没有办法传递fd,不过它会把它要输出的东西输出到stdout中,开启这个开源程序之前把stdout重定向到fd上就可以完成了对接。铺垫完了,下面就开始正题。 其实这个APUE上有讲这转载 2015-03-11 11:46:31 · 687 阅读 · 0 评论 -
Linux判断文件描述符是否有效
Linux判断文件描述符是否有效[cpp] view plaincopy/** * author:kangear@163.com * date :2015-01-17 * func :check if the fileDescriptor is fine. */ #include #incl转载 2015-03-11 11:36:38 · 3899 阅读 · 0 评论 -
linux里面gdb的调试
gdb调试命令 本文主要参考自:http://www.cnblogs.com/zzx1045917067/archive/2012/12/26/2834310.html,进行了一点补充和编排;Core dump部分参考了:http://blog.ddup.us/?p=176。 gdb是一个在UNIX环境下的命令行调试工具。 如果需要使用gdb调试程序,请在gcc时转载 2015-03-11 10:55:52 · 437 阅读 · 0 评论 -
C语言中的Sleep函数
Sleep函数:功 能: 执行挂起一段时间 用 法: unsigned sleep(unsigned seconds); 注意: 在VC中使用带上头文件#include ,在Linux下,gcc编译器中,使用的头文件因gcc版本的不同而不同#include 在VC中,Sleep中的第一个英文字符为大写的"S" ,在linux下不要大写,在标准C中是s转载 2015-03-10 15:20:04 · 821 阅读 · 0 评论 -
Linux中使用线程
我并不假定你会使用Linux的线程,所以在这里就简单的介绍一下。如果你之前有过多线程方面的编程经验,完全可以忽略本文的内容,因为它非常的初级。首先说明一下,在Linux编写多线程程序需要包含头文件pthread.h。也就是说你在任何采用多线程设计的程序中都会看到类似这样的代码:[cpp] view plaincopy#includ转载 2015-01-04 15:16:05 · 523 阅读 · 0 评论 -
pthread_cond_wait()与pthread_cond_signal()
pthread_cond_wait()用法:ptread_mutex_lock(&mut);pthread_cond_wait(&cond, &mut);pthread_mutex_unlock(&mut);pthread_cond_signal(&cond);的用法和pthread_cond_wait是一样的。我们先来看看pthread_con转载 2015-01-04 11:34:23 · 793 阅读 · 0 评论 -
线程的互斥锁
1.线程的互斥锁1.1. 初始化:在Linux下, 线程的互斥量数据类型是pthread_mutex_t. 在使用前, 要对它进行初始化:对于静态分配的互斥量, 可以把它设置为PTHREAD_MUTEX_INITIALIZER, 或者调用pthread_mutex_init.对于动态分配的互斥量, 在申请内存(malloc)之后, 通过pthread_mutex_init进行初转载 2015-02-10 17:23:15 · 378 阅读 · 0 评论