linux编程
文章平均质量分 57
sean_hy2009
这个作者很懒,什么都没留下…
展开
-
POSIX线程之同步
<br />信号量进行同步<br /> <br />有两组接口函数用于信号量。一组源于posix的实时扩展,用于线程。另外一组称为系统v信号量,常用于进程的同步。<br /> <br />在这里我们看前面的一组。我们用的是最简单的信号量--二进制信号量(0|1),当然还有一种更通用的信号量--计数信号量(有更大的取值<br /> <br />范围)。<br /> <br />信号量函数的名字都已sem_开头。线程中使用的基本信号量函数有四个:<br />#include<semaphore.h>int原创 2010-07-20 18:13:00 · 639 阅读 · 0 评论 -
FIONREAD
<br />当在ioctl里使用FIONREAD时,除了获得所指定的读缓存大小以外,还有清除设备准备就绪状态的作用.<br />原创 2010-08-05 20:16:00 · 1113 阅读 · 0 评论 -
INADDR_ANY
<br />sockAddr.sin_addr.s_addr = htonl( INADDR_ANY );//常用在服务器端,表示监听所有的客户端连接原创 2010-08-05 20:52:00 · 442 阅读 · 0 评论 -
Fedora11下找回/dev/dsp设备
<br />以root用户执行 modprobe snd-pcm-oss<br /><br />自动加载,在/etc/sysconfig/modules目录创建一个文件:<br />snd-pcm-oss.modules<br />内容如下:<br />#!/bin/sh<br /><br />if [ ! -c /dev/dsp ] ; then<br /> exec /sbin/modprobe snd-pcm-oss >/dev/null 2>&1<br />转载 2010-08-04 20:46:00 · 525 阅读 · 0 评论 -
makefile浅谈
<br />在大的工程中,我们可能无从下手。不过一般的工程里面都有个makefile文件,makefile文件告诉我们目标文件和他所依赖的文件。根据makefile文件我们就能很清晰的了解项目的结构。下面来说说他的基本的语法。<br />makefile文件的一般的语法格式:<br /> <br />目标:依赖条件(可以有多个依赖)<br /><TAB>命令<br /> <br />上面就是一般的格式。目标可以有多个目标。<TAB>必须是tab缩进,不能用空格来替换。命令将由shell来解释。下面来看看一个原创 2010-07-30 09:35:00 · 489 阅读 · 0 评论 -
sockt套接字之系统调用的那些事儿
套接字的特性由三个属性确定:域(domain),类型和协议。创建套接字socket系统调用创建一个套接字并返回一个描述符,该描述符可以用来访问套接字。#include #icnlude int socket(int domain,int type,int protocol);/*domain参数指定协议簇,一般我们用AF_UNIX和AF_INET来填充,前面的表示 UNIX域协议(文件系统套接字),后一个参数表示ARPA因特网协议(UNIX网络套接字);type指定新套接字的通信特性。取值一原创 2010-07-25 18:10:00 · 826 阅读 · 0 评论 -
socket套接字
<br />套接字连接:<br /> <br />首先,服务器应用程序用系统调用socket创建一个套接字;<br /> <br />接下来,给套接字命名;<br /> <br />最后,连接套接字。原创 2010-07-24 10:17:00 · 446 阅读 · 0 评论 -
进程间通信之消息队列篇
<br />如同其他ipc机制一样,消息队列提供量一种从一个进程向另外一个进程发送一个数据块的方法。每个数据快都被认为含有一个类型,接收进程可以独立地接收含有不同类型直的数据块。我们可以通过发送消息来几乎完全避免命名管道的同步和阻塞问题。但不能解决譬如管道满时阻塞问题。接口函数和其他ipc机制类似。<br />#include <sys/msg.h>int msgget(key_t key,int msgflg);int msgsnd(int msgid,const void *msg_ptr,si原创 2010-07-23 21:47:00 · 441 阅读 · 0 评论 -
进程和线程的区别
<br />进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。进程和线程的区别在于:<br />简而言之,一个程序至少有一个进程,一个进程至少有一个线程. <br />线程的划分尺度小于进程,使得多线程程序的并发性高。<br />另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。<br />线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在转载 2010-07-23 11:47:00 · 359 阅读 · 0 评论 -
进程间通信之信号量篇
<br />在这里我们要区别线程同步通信时的信号量机制。具体它们的接口函数可以查看相关资料,我们这里只看看进程通信的信号量机制。<br />在编程中,为了防止出现因多个程序同时访问一个共享的资源而引发的问题,我们通过生成并使用令牌来授权,在任一时刻只能有一个执行线程访问代码的临界区域。<br />PV 操作<br />P(sv) 如果sv的直大于0,就给他减1;如果他的直等于0,就挂起该进程的执行;<br />V(sv) 如果有其他进程因等待sv而被挂起,就让它执行;如果没有进程因等待sv而被挂起,就给原创 2010-07-23 11:38:00 · 449 阅读 · 0 评论 -
POSIX线程之同步续
互斥量进行同步另一种用在多线程程序中的访问方法是使用互斥量。它允许 程序员锁住某个对象,使得每次只能有一个线程访问他。为了控制对关键代码的访问,必须在进入代码之前锁住一个互斥量,然后在完成操作之后解锁它。实例:#include #include #include #include #include #include pthread_mutex_t work_mutex;void *thread_fun(void *arg);#define WORK_SIZE 1024ch原创 2010-07-20 20:45:00 · 461 阅读 · 0 评论 -
进程间通信之共享内存篇
<br />共享内存是在两个正在运行的进程之间传递数据的一种非常有效的方式。但是他并没有为我们提供同步的机制,因此我们需要用其他的机制来同步对共享内存的访问。对共享内存访问的同步控制必须要由程序员来控制。一种典型的应用是,我们用共享内存来提供对大块内存区域的有效访问,同时通过传递小消息来同步对该内存的访问。如果一个进程向共享内存段写入了数据,所做的改动立即被其他可以访问该共享内存的进程看到。<br /> <br />接口函数:<br />#include <sys/shm.h>int shmget(ke原创 2010-07-23 18:10:00 · 548 阅读 · 0 评论 -
进程间通信之管道fifo篇
<br />这里我们通过一个例程来说明,这个例程是通过管道来编写一个简单的客户/服务器应用程序。在这里我们允许多个客户进程都可以向服务器发送数据。因为没次服务其只能处理一个数据块,所以只使用一个fifo,服务器通过他读取数据,每个客户向它写数据。只要将fifo以阻塞模式打开,服务器和客户就会根据需要自动被阻塞。<br />将处理后的数据返回给客户,我们需要为每个客户安排第二个管道来接受返回的数据。通过在传递给服务器的原先数据中加上客户的进程标识附,双方就可以使用他来为返回数据的管道生成一个唯一的名字。<br原创 2010-07-22 17:02:00 · 474 阅读 · 0 评论 -
进程间通信之管道篇
这里我们谈谈进程间交互的机制,这里不同于使用信号来让进程间发送消息。当从一个进程连接数据流到另一个进程时,我们使用术语管道(pipe)。我们通常是把一个进程的输出通过管道连接到另一个进程的输入。我们来看看底层的pipe()函数调用。通过这个函数在两个程序间传递数据不需要启动一个shell来解释请求的命令。他同时还提供量对读写数据的更多控制。pipe函数的原型如下:#include /*pipe的参数是由两个整数类型的文件描述符组成的数组指针*/int pipe(int file_descriptor原创 2010-07-22 10:21:00 · 436 阅读 · 0 评论 -
POSIX线程之属性篇
现在来谈谈线程的属性#include #include #include #include #include #include void *thread_fun(void *arg);char message[]="hello";int thread_finished = 0;int main(){ int res; pthread_t a_thread; pthread_attr_t thread_attr; //初始化属性 res=pt原创 2010-07-20 22:08:00 · 434 阅读 · 0 评论 -
htons函数具体解释
<br />在Linux和Windows网络编程时需要用到htons和htonl函数,用来将主机字节顺序转换为网络字节顺序。<br /> 在Intel机器下,执行以下程序int main()<br />...{<br /> printf("%d /n",htons(16)); return 0;<br />}<br />得到的结果是4096,初一看感觉很怪。<br /> 解释如下,数字16的16进制表示为0x0010,数字4096的16进制表示为0x1000。由于转载 2010-08-05 20:53:00 · 497 阅读 · 0 评论