Chinaunix首页 | 论坛 | 博客
  • 博客访问: 129522
  • 博文数量: 44
  • 博客积分: 956
  • 博客等级: 准尉
  • 技术积分: 521
  • 用 户 组: 普通用户
  • 注册时间: 2011-04-18 12:45
文章分类
文章存档

2012年(11)

2011年(33)

分类: LINUX

2012-01-05 18:16:58

FIFO:有名管道
1,命令:mkfifo name.fifo
2, 函数:int mkfifo(const char path, mode_t mode);

当以只写方式打开,读端不存在,则阻塞在open,直到有读端
当以只读方式打开,写端不存在,则阻塞在open,直到有写端

大小也是64K,数据存放在内存中

当写入数据小于64K时,会尝试写入,如能全部写入,则写入,如不能,等待直到能全部写入
当读出的数据小于管道现有的数据,读出所需要的数据,小于现有数据,全部读出
若为空,阻塞

在读写过程中,读端关闭,写端收到SIGPIPE
在读写过程中,写端关闭,读端读出所有数据,直到为空
在open时,加入O_NONBLOCK为非阻塞模型,没有写端,读端可以成功打开
 没有读端,写端无法打开
当fifo有数据,读端读出数据,
当fifo没有数据,a,写端存在,返回-1表示,无数据可读
 b,写端不存在,返回0表示写端不存在
当fifo有足够空间,写入全部,返回写入字符的个数
当fifo没有足够空间,写入可写入数据,并且返回写入数据的大小
当fifo没有空间,返回-1
当读写端同事存在时,关闭写端,读端操作返回0
当读写端同时存在时,关闭读端,写端收到SIGFIFO


信号:
信号时在软件层次上对中断机制的一种模拟,是一种异步通信方式
信号处理方式:默认方式,忽略信号(SIGKILL,SIGSTOP不合忽略)
捕捉信号:自定义处理方式


SIGKILL:不可以被阻塞,处理,忽略
SIGSTOP:不可以被阻塞,处理,忽略


int kill(pid_t pid, int sig);
pid:正数,表示该id的进程
    0,当前进程组中的进程
    -1:发送给进程表中的所有进程
int raise(int sig);
向自己发送一个信号

alarm(int seconds)不阻塞,在seconds秒后自动发出一个SIGALRM信号
int setitimer(int which, const struct itimerval *new_value, struct itimerval *old_value);
which:计时策略,ITIMER_REAL:CPU时间,ITIMER_VIRTUAL:进程时间, ITIMER_PROF:都行
该函数会在设定的时间自动发出一个SIGALRM信号
struct itimerval结构体:
  1. truct itimerval {
  2.         struct timeval it_interval; /* next value */
  3.         struct timeval it_value; /* current value */
  4.     };

  5.     struct timeval {
  6.         long tv_sec; /* seconds */
  7.         long tv_usec; /* microseconds */
  8.     };

pause()挂起进程,会被任意信号唤醒

typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler);
典型用法:
  1. signal(SIGNUM, myfunc);//用于注册,当捕获到SIGNUM信号时,会由myfunc函数处理

int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact);
典型用法:
  1. struct sigaction act;
  2. sigaction(SIGALRM, NULL, &act);//先获取
  3. act.sa_handler = my_func;//设置相关项
  4. sigaction(SIGALRM, &act, NULL);//在设置
阅读(1365) | 评论(1) | 转发(0) |
0

上一篇:线程基础(20)

下一篇:进程间通信(22)

给主人留下些什么吧!~~

3372405522012-01-08 17:05:09

要是有例子就好了 适合新人学习