LINUX应用
文章平均质量分 73
wangpengqi
这个作者很懒,什么都没留下…
展开
-
ioctl函数详细说明
ioctl 函数 本函数影响由fd 参数引用的一个打开的文件。 #includeint ioctl( int fd, int request, .../* void *arg */ );返回0 :成功 -1 :出错 第三个参数总是一个指针,但指针的类型依赖于request 参数。我们可以把和网络相关的请求划分为6 类:套接口操作文件操作接口操作转载 2013-12-06 12:17:04 · 729 阅读 · 0 评论 -
epoll_create, epoll_ctl和epoll_wait & select函数分析
man epoll之后,得到如下结果:NAME epoll - I/O event notification facilitySYNOPSIS #include DEscrīptION epoll is a variant of poll(2) that can be used either as Edge or Level转载 2013-08-12 18:13:10 · 1028 阅读 · 0 评论 -
Linux下获取本地IP地址-getifaddrs函数
#include #include #include #include #include #include #include int main(int argc, char *argv[]){ struct ifaddrs *ifaddr, *ifa; int family, s; char host[NI_MAXHOST]; if (getif转载 2013-08-20 17:33:35 · 5098 阅读 · 0 评论 -
静态库-动态库混合编译
一部分静态连接,一部分动态连接的方法是:-Wl,-dn后面是静态链接-Wl,-dy后面是动态连接,具体如下:cc -g -o test_server main_server.o main_db.o err_me.o -Wl,-dn -L/usr/local/mysql/lib/ -l mysqlclient -Wl,-dy -lpthread -lm -ldl -lcrypt原创 2013-08-07 18:22:34 · 1669 阅读 · 0 评论 -
发一个多CPU中进程与CPU绑定的例子
现在多CPU的趋势越来越大了. 有时候为了更好地操作机器, 需要将某个进程绑定到具体的CPU上去. 下面给出了一个进程绑定到具体的CPU上去的一个例子. cpu.c #include #include #include #include #include #define __USE_GNU #include #include #include int main(i转载 2013-08-07 14:55:13 · 666 阅读 · 0 评论 -
Linux系统调用--getrlimit/setrlimit函数详解
功能描述:获取或设定资源使用限制。每种资源都有相关的软硬限制,软限制是内核强加给相应资源的限制值,硬限制是软限制的最大值。非授权调用进程只可以将其软限制指定为0~硬限制范围中的某个值,同时能不可逆转地降低其硬限制。授权进程可以任意改变其软硬限制。RLIM_INFINITY的值表示不对资源限制。用法:include #include int getrlimit(int转载 2013-08-07 14:35:35 · 930 阅读 · 0 评论 -
Linux的capability深入分析(2)
一)capability的工具介绍在我们的试验环境是RHEL6,libcap-2.16软件包中包含了相关的capability设置及查看工作,如下:rpm -ql libcap-2.16-5.2.el6.i686 /lib/libcap.so.2/lib/libcap.so.2.16/lib/security/pam_cap.so转载 2013-08-07 18:46:38 · 18079 阅读 · 1 评论 -
深入了解epoll
一、 介绍Epoll 是一种高效的管理socket的模型,相对于select和poll来说具有更高的效率和易用性。传统的select以及poll的效率会因为 socket数量的线形递增而导致呈二次乃至三次方的下降,而epoll的性能不会随socket数量增加而下降。标准的linux-2.4.20内核不支持epoll,需要打patch。本文主要从linux-2.4.32和linux-2.6.10转载 2013-08-07 18:43:08 · 1169 阅读 · 0 评论 -
Linux C函数之文件及目录函数
文件及目录函数(37)chdir, chmod, chown, chrootfchdir, fchmod, fchown, ftruncatelchown, truncate,get_current_dir_name, getcwd, getwdopendir, closedir, readir, scandir, seekdir, rewinddir, telld转载 2013-05-18 18:29:26 · 882 阅读 · 0 评论 -
memcpy()和memmove()函数之间区别
void* memcpy(void* dest,void* source,unsigned count);memcpy是把source 指向的对象中的n个字符拷贝到dest所指向的对象中,返回指向结果对象的指针。void* memmove(void* dest,void* source,unsigned count);移动一块字节memmove也是把source 指向的对象中的n个字符转载 2013-02-18 14:54:54 · 398 阅读 · 0 评论 -
CPU亲和性(affinity)sched_setaffinity() 和 sched_getaffinity()
简单地说,CPU 亲和性(affinity) 就是进程要在某个给定的 CPU 上尽量长时间地运行而不被迁移到其他处理器的倾向性。Linux 内核进程调度器天生就具有被称为 软 CPU 亲和性(affinity) 的特性,这意味着进程通常不会在处理器之间频繁迁移。这种状态正是我们希望的,因为进程迁移的频率小就意味着产生的负载小。2.6 版本的 Linux 内核还包含了一种机制,它让开发人员可转载 2013-08-12 19:19:07 · 1414 阅读 · 0 评论 -
深入了解epoll 函数
一、 介绍Epoll 是一种高效的管理socket的模型,相对于select和poll来说具有更高的效率和易用性。传统的select以及poll的效率会因为 socket数量的线形递增而导致呈二次乃至三次方的下降,而epoll的性能不会随socket数量增加而下降。标准的linux-2.4.20内核不支持epoll,需要打patch。本文主要从linux-2.4.32和linux-2.6.10转载 2013-08-12 18:57:29 · 15999 阅读 · 1 评论 -
POSIX线程专有数据的空间释放问题,pthread_key_create
下面说一下线程中特有的线程存储, Thread Specific Data 。线程存储有什么用了?他是什么意思了?大家都知道,在多线程程序中,所有线程共享程序中的变量。现在有一全局变量,所有线程都可以使用它,改变它的值。而如果每个线程希望能单独拥有它,那么就需要使用线程存储了。表面上看起来这是一个全局变量,所有线程都可以使用它,而它的值在每一个线程中又是单独存储的。这就是线程存储的意义。下面说转载 2013-12-10 15:48:55 · 849 阅读 · 0 评论 -
syslog(),openlog(),closelog()
这里面的三个函数openlog, syslog, closelog是一套系统日志写入接口。另外那个vsyslog和syslog功能一样,只是参数格式不同。 通常,syslog守护进程读取三种格式的记录消息。此守护进程在启动时读一个配置文件。一般来说,其文件名为/etc/syslog.conf,该文件决定了不同种类的消息应送向何处。例如,紧急消息可被送向系统管理员(若已登录),并在控制台上转载 2013-11-15 16:26:33 · 651 阅读 · 0 评论 -
linux c libcurl的简单使用
curl是Linux下一个非常著名的下载库,通过这个库,可以很简单的实现文件的下载等操作。看一个简单的例子:#include #include #include CURL *curl;CURLcode res;size_t write_data(void *ptr, size_t size, size_t nmemb, void *stream){i转载 2013-11-04 16:17:51 · 1599 阅读 · 0 评论 -
mlock家族:锁定物理内存
锁住内存是为了防止这段内存被操作系统swap掉。并且由于此操作风险高,仅超级用户可以执行。看家族成员: #include int mlock(const void *addr, size_t len); int munlock(const void *addr, size_t len); int mlocka转载 2013-11-15 16:32:18 · 5403 阅读 · 1 评论 -
获得本机IP地址
#include #include #include #include #include #include #include #include #include #include #include int getlocalip(char* outip){ int i=0; int sockfd; struct ifconf ifconf; char buf[512转载 2013-10-30 14:31:33 · 625 阅读 · 0 评论 -
Linux 多线程应用中如何编写安全的信号处理函数
Linux 多线程应用中编写安全的信号处理函数在开发多线程应用时,开发人员一般都会考虑线程安全,会使用 pthread_mutex 去保护全局变量。如果应用中使用了信号,而且信号的产生不是因为程序运行出错,而是程序逻辑需要,譬如 SIGUSR1、SIGRTMIN 等,信号在被处理后应用程序还将正常运行。在编写这类信号处理函数时,应用层面的开发人员却往往忽略了信号处理函数执行的上下文背景,没转载 2013-09-13 19:08:12 · 889 阅读 · 0 评论 -
信号集操作函数,信号阻塞与未决
一,信号集及相关操作函数信号集被定义为一种数据类型:typedef struct { unsigned long sig[_NSIG_WORDS];} sigset_t信号集用来描述信号的集合,每个信号占用一位(64位)。Linux所支持的所有信号可以全部或部分的出现在信号集中,主要与信号阻塞相关函数配合使用。下面转载 2013-09-13 10:56:15 · 2469 阅读 · 1 评论 -
信号发送函数sigqueue和信号安装函数sigaction
一,sigaction()#include int sigaction(int signum,const struct sigaction *act,struct sigaction *oldact));sigaction函数用于改变进程接收到特定信号后的行为。该函数的第一个参数为信号的值,可以为除SIGKILL及SIGSTOP外的任何一个特定有效的信号(为这两个信号定义自己转载 2013-09-13 10:51:32 · 5608 阅读 · 2 评论 -
Linux的capability深入分析(1)
一)概述:1)从2.1版开始,Linux内核有了能力(capability)的概念,即它打破了UNIX/LINUX操作系统中超级用户/普通用户的概念,由普通用户也可以做只有超级用户可以完成的工作.2)capability可以作用在进程上(受限),也可以作用在程序文件上,它与sudo不同,sudo只针对用户/程序/文件的概述,即sudo可以配置某个用户可以执行转载 2013-08-07 18:46:05 · 11741 阅读 · 0 评论 -
#if defined(__cplusplus)
由于C++编译器需要支持函数的重载,会改变函数的名称,因此dll的导出函数通常是标准C定义的。这就使得C和C++的互相调用变得很常见。但是有时可能又会直接用C来调用,不想重新写代码,让标准C编写的dll函数定义在C和C++编译器下都能编译通过,通常会使用以下的格式:(这个格式在很多成熟的代码中很常见)#if defined(__cplusplus)extern "C" {#endif转载 2013-02-18 15:21:24 · 1274 阅读 · 0 评论 -
C++中extern “C”含义深层探索
C++中extern “C”含义深层探索1.引言 C++语言的创建初衷是“a better C”,但是这并不意味着C++中类似C语言的全局变量和函数所采用的编译和连接方式与C语言完全相同。作为一种欲与C兼容的语言,C++保留了一部分过程式语言的特点(被世人称为“不彻底地面向对象”),因而它可以定义不属于任何类的全局变量和函数。但是,C++毕竟是一种面向对象的程序设转载 2013-02-18 15:16:54 · 371 阅读 · 0 评论 -
poll() 函数
poll() | 多路复用 I/O和 select() 函数一样,poll() 函数也可以用于执行多路复用 I/O 。但 poll() 与 slect()相比,用起来更加直观容易。使用该函数,需要包含 #include 文件,实际上最终包含的是 文件,poll.h 里的内容也就是 #include 。函数的原型:引用#include extern int poll转载 2013-01-20 14:20:13 · 966 阅读 · 0 评论 -
pthread_cancel
http://www.ibm.com/developerworks/cn/websphere/library/techarticles/0804_wangyuming/index.htmlhttp://blog.chinaunix.net/u1/43664/showart_346282.html 线程创建1.1 线程与进程相对进程而言,线程是一个更加接近于执行体的概念,它可以与转载 2012-09-10 14:07:34 · 446 阅读 · 0 评论 -
pthread_cancel()与pthread_cancel
pthread_cancel()与pthread_cancelpthread_cancel() 在posix中有叙述:将其称之为“不安全的上下文”一个thread中,处于完全封闭的环境,没有任何代码出口,呵呵,pthread_cancel的做法就值得怀疑了,安全吗?我一直坚持认为pthread_cancel是个危险的函数,如果在代码中遇到需要停止thread的流程,我都要在th转载 2012-09-10 23:03:32 · 790 阅读 · 0 评论 -
主题:ioctl函数详细说明
ioctl 函数 本函数影响由fd 参数引用的一个打开的文件。 #includeint ioctl( int fd, int request, .../* void *arg */ );返回0 :成功 -1 :出错 第三个参数总是一个指针,但指针的类型依赖于request 参数。我们可以把和网络相关的请求划分为6 类:套接口操作文件操作接口操作转载 2012-09-10 22:50:43 · 476 阅读 · 0 评论 -
条件锁pthread_cond_t
http://egeho123.blogbus.com/logs/10821816.html2006年09月05日 12:42说明,等待线程1。使用pthread_cond_wait前要先加锁2。pthread_cond_wait内部会解锁,然后等待条件变量被其它线程激活3。pthread_cond_wait被激活后会再自动加锁激活线程:1。加锁(和等待线程转载 2012-09-10 21:09:54 · 615 阅读 · 0 评论 -
abort函数
我们早先提到过abort函数导致异常程序终止。#include stdlib.h>void abort(void);函数决不返回。这个函数向调用者发送SIGABRT信号。(进程不该忽略这个信号。)ISO C指出调用abort将会用raise(SIGABRT)来向主机环境分发一个不成功的终止消息。ISO C要求如果信号被捕获而信转载 2012-09-03 22:32:15 · 13447 阅读 · 0 评论 -
offsetof宏实现以及container_of《代码》
#include#include#define offsetof(TYPE, MEMBER) ((size_t)&((TYPE *)0)->MEMBER)#define container_of(ptr, type, member) ({ \ const typeof( ((type *)0)->member ) *__mpt转载 2012-08-19 23:36:34 · 689 阅读 · 0 评论 -
qsort函数《代码》
#include #include int compare_ints(const void* a, const void* b){ const int *arg1 = a; const int *arg2 = b; return *arg1 - *arg2;} int main(void){ int i; i转载 2012-08-15 16:45:49 · 591 阅读 · 0 评论 -
gettimeofday函数使用《代码》
一.gettimeofday()函数的使用方法:1.简介:在C语言中可以使用函数gettimeofday()函数来得到时间。它的精度可以达到微妙2.函数原型:#includeint gettimeofday(struct timeval*tv,struct timezone *tz )3.说明:gettimeofday()会把目前的时间用tv 结构体返回,当地时区的转载 2012-08-15 15:36:02 · 578 阅读 · 0 评论 -
strftime,strptime系统函数
#include#include#includeint main(){ struct tm *tm_ptr,timestruct; time_t the_time; char buf[256]; (void) time(&the_time); tm_ptr=localtime(&the_time); strftime(buf,256,"%Y-%m原创 2012-08-13 14:02:23 · 797 阅读 · 0 评论 -
希尔排序Linux下C实现
希尔排序Linux下C实现<!--#favor_form {width:200px}#favor_form p {color:#666}#favor_form form {height:60px; width:200px}#favor_form form ._favor_input {display:block; margin:2px 0; wi转载 2012-10-06 14:39:43 · 761 阅读 · 0 评论 -
typeof关键字简介
typeof关键字是C语言中的一个新扩展。只要可以接受typedef名称,Sun Studio C 编译器就可以接受带有typeof的结构,包括以下语法类别:声明 函数声明符中的参数类型链表和返回类型 类型定义 类型操作符s sizeof操作符 复合文字 typeof实参 编译器接受带双下划线的关键字:__typeof和__typeof__。本文中的例子并没有遵循使用双下划线的惯例。从转载 2012-10-09 13:06:57 · 471 阅读 · 0 评论 -
Linux下Kill函数用法
#include #include int kill(pid_t pid, int sig);参数: pid:可能选择有以下四种1. pid大于零时,pid是信号欲送往的进程的标识。2. pid等于零时,信号将送往所有与调用kill()的那个进程属同一个使用组的进程。3. pid等于-1时,信号将送往所有调用进程有权给其发送信号的进程,除了进程1(init)转载 2012-12-05 11:04:13 · 621 阅读 · 0 评论 -
va_list函数族应用
va_start()va_end()函数应用:man: #include void va_start(va_list ap, last); type va_arg(va_list ap, type); void va_end(va_list ap); void va_copy(va_list dest, va转载 2012-12-03 22:20:26 · 397 阅读 · 0 评论 -
Ffmpeg快速应用开发
Ffmpeg 中的Libavformat 和 libavcodec库是访问大多数视频文件格式的一个很好的方法。不幸的是,在开发您自己的程序时,这套库基本上没有提供什么实际的文档可以用来作为参考(至少我没有找到任何文档),并且它的例程也并没有太多的帮助。这种情况意味着,当我在最近某个项目中需要用到 libavformat/libavcodec 库时,需要作很多试验来搞清楚怎样使用它们。这里是转载 2012-11-19 17:06:33 · 570 阅读 · 0 评论 -
ubuntu下ffmpeg编译安装
ubuntu下ffmpeg编译安装 解决库链接不上的问题ubuntu下ffmpeg编译安装 1、ffmpeg是什么东西?相信很多人第一次接触这个东西,我先在这里做个简单的介绍。FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。它包括了目前领先的音/视频编码库libavcodec等。 libavformat :用于各种音视频封转载 2012-11-19 13:31:13 · 858 阅读 · 0 评论 -
利用ffmpeg提供的库(API)进行音频与视频的编码并生成文件
Output example.c目录 [隐藏]1 概述2 音频输出2.1 add_audio_stream2.2 open_audio2.3 get_audio_frame2.4 write_audio_frame2.5 close_audio3 视频输出3.1 add_video_stream3.2 alloc_pictur转载 2012-11-19 17:14:43 · 2268 阅读 · 0 评论