![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
UNIX环境编程
xiaoshengqdlg
这个作者很懒,什么都没留下…
展开
-
UNIX命名管道FIFO
FIFO ,又称命名管道,是Linux下(unix环境下)一种进程间通信的机制,应用广泛。 函数mkfifo 用于创建命名管道,使用命令man 3 mkfifo 可查看此函数信息。FIFO创建后,可以像普通文件一样对其访问。 Linux下一个同名命令mkfifo 也用于创建FIFO,例如:执行命令$ mkfifo /tmp/fifo$ cat /tmp转载 2014-11-11 09:36:11 · 665 阅读 · 0 评论 -
Linux信号处理机制
本文简单介绍下Linux信号处理机制,为介绍二进制翻译下信号处理机制做一个铺垫。本文主要参考书目《Linux内核源代码情景分析》《独辟蹊径品内核:Linux内核源代码导读》首先,先说一下什么是信号。信号本质上是在软件层次上对中断机制的一种模拟,其主要有以下几种来源:程序错误:除零,非法内存访问…外部信号:终端Ctrl-C产生SGINT信号,定时器到期产生SIGALRM…转载 2015-03-14 14:27:28 · 572 阅读 · 0 评论 -
C标准缓冲区和内核缓冲区
1.C标准库的I/O缓冲区 UNIX的传统 是Everything is a file,键盘、显示器、串口、磁盘等设备在/dev 目录下都有一个特殊的设备文件与之对应,这些设备文件也可以像普通文件(保存在磁盘上的文件)一样打开、读、写和关闭,使用的函数接口是相同的。用户程序调用C标准I/O库函数读写普通文件或设备,而这些库函数要通过系统调用把读写请求传给内核 ,最终由内核驱动磁盘转载 2014-09-01 11:30:24 · 677 阅读 · 0 评论 -
系统调用、POSIX、C库、系统命令和内核函数
摘要:《Linux内核修炼之道》第5章讲解系统调用,它是应用程序和内核间的桥梁,学习并理解它是我们走向内核的一个很好的过渡。本节为大家介绍系统调用、POSIX、C库、系统命令和内核函数。 5.1.1 系统调用、POSIX、C库、系统命令和内核函数(1)系统调用和POSIX。系统调用虽然是内核和用户应用程序之间的沟通桥梁,是用户应用程序访问内核的入口点,但通常情况下,应用程转载 2016-06-29 23:36:00 · 505 阅读 · 0 评论 -
UNIX信号的阻塞概念
当造成信号的事件发生时,为进程产生一个信号(或向进程发送一个信号)。当一个信号产生时,内核通常在进程表中以某种形式设置一个标志。当对信号采取了这种动作时,我们说向进程递送了一个信号。在信号产生和递送之间的时间间隔内,称信号是未决的。进程可以选择“阻塞信号递送”。如果为进程产生了一个阻塞信号,而且对该信号的动作是系统默认动作或捕捉该信号,则为改进程将此信号保持为未决状态(这个时候我认为内核会在进原创 2016-07-15 18:04:27 · 719 阅读 · 0 评论 -
pthread_join与pthread_deatch和分离线程的关系
在任何一个时间点上,线程是可结合的(joinable)或者是分离的(detached)。一个可结合的线程能够被其他线程收回其资源和杀死。在被其他线程回收之前,它的存储器资源(例如栈)是不释放的。相反,一个分离的线程是不能被其他线程回收或杀死的,它的存储器资源在它终止时由系统自动释放。 默认情况下,线程被创建成可结合的。为了避免存储器泄漏,每个可结合线程都应该要么被显示地回收,即调用p转载 2016-07-15 18:58:12 · 1960 阅读 · 0 评论 -
UNIX条件变量
UNIX条件变量是用户线程间同步的一种方法,条件变量用于以下这种情况:需要在一个线程中一直判断等待一个条件的值,并根据这个值做出相应的操作。而恰好这个条件的值可以被另一个线程改变。那么就需要对这个条件用互斥量保护起来。并在这个条件改变的时候通过条件变量来通知另一个线程原创 2016-07-15 19:37:04 · 376 阅读 · 0 评论 -
XSI IPC为什么需要键来标识内核IPC结构
管道文件在进程间通讯,由于管道文件是一个能够由用户看到的实际存在的文件。所以只要在服务器进程和客户端进程各自调用open来打开管道路径就可以得到不同的管道描述符了,这两个不同的管道描述符都指向同一个管道文件。而XSI IPC是一个在内核中维护的数据结构。用户在使用之前无法调用open函数来得到IPC的标识符。所以可以服务器进程和客户端进程可以通过用一个键值相同的值来创建或者获取IPC的原创 2016-07-18 13:27:23 · 855 阅读 · 0 评论 -
XSI IPC 进程间通讯方式
信号量:1. 通过一个键值得到或者创建信号量,并得到返回的信号量的标识符。int semget(key_t key, int nsems, int semflg)2. 通过得到的标识符来设置或者获得信号量的属性值,信号量的属性值在结构体semid_ds中int semctl(int semid, int semnum, int cmd, ...);3. 通过得到的标识符来对原创 2016-07-19 09:33:57 · 548 阅读 · 0 评论 -
Linux定时器
摘要】本文主要介绍了linux的时间和定时器。【关键词】Linux 定时器 时间一、问题的提出我们开发程序时,经常会遇到时间和定时器的问题,为了更好的使用时间和定时器,现在列举一个一些时间结构体、函数和定时器。二、解决思路1.时间类型1) time_t是一个长整型,一般用来表示用1970年以来的秒数。2)struct timeval有两个转载 2014-08-01 10:41:24 · 462 阅读 · 0 评论 -
Linux进程间通信----命名管道
在前一篇文章——Linux进程间通信——使用匿名管道中,我们看到了如何使用匿名管道来在进程之间传递数据,同时也看到了这个方式的一个缺陷,就是这些进程都由一个共同的祖先进程启动,这给我们在不相关的的进程之间交换数据带来了不方便。这里将会介绍进程的另一种通信方式——命名管道,来解决不相关进程间的通信问题。一、什么是命名管道命名管道也被称为FIFO文件,它是一种特殊类型的文件,它在文件系转载 2015-04-03 11:49:33 · 387 阅读 · 0 评论 -
UNIX中断系统调用和可重入函数
可中断的系统调用指的是进程阻塞在这个系统调用期间接受到一个信号,该系统调用会返回并返回出错信息errno=ENTER(注意:信号都是内核接收,并在系统从内核态返回到用户态的时候执行信号处理程序。信号中断系统调用这个现象是信号促使系统从内核态切换到用户态)。 可重入函数指的是这个系统调用函数在被信号中断后,指令进入信号处理程序后仍然允许调用这个系统调用而不会出错。原创 2015-02-01 14:15:11 · 1000 阅读 · 0 评论 -
UNIX文件系统中各种文件、概念和函数之间的关系
unlink、硬链接、文件描述符、符号链接,文件名真正指向文件内容的是inode结构体(i节点)。文件描述符--------------->打开的文件表--------->v节点表---------------->i节点----------->文件内容原创 2015-03-12 17:31:43 · 677 阅读 · 0 评论 -
Linux操作系统多线程信号总结(转)
linux 多线程信号编程总结 linux 多线程信号总结(一) 1. 在多线程环境下,产生的信号是传递给整个进程的,一般而言,所有线程都有机会收到这个信号,进程在收到信号的的线程上下文执行信号处理函数,具体是哪个线程执行的难以获知。 2 signal函数BSD/Linux的实现并不在信号处理函数调用时,恢复信号的处理为默认,而是在信号处理时阻塞此信号,直到信号处理函数返回。其他转载 2013-11-11 14:18:39 · 680 阅读 · 0 评论 -
C语言--main(int argc char**argv)具体用法
argc是命令行总的参数个数 argv[]是argc个参数,其中第0个参数是程序的全名,以后的参数 命令行后面跟的用户输入的参数,比如: int main(int argc, char* argv[]) { int i; for (i = 0; icoutcin>>i; return 0; } 执行时敲入 F:\MYDOCU~1\TEMP转载 2014-04-17 16:15:38 · 787 阅读 · 0 评论 -
sync、fsync、fdatasync、fflush函数
传统的UNIX实现在内核中设有缓冲区高速缓存或页面高速缓存,大多数磁盘 I/O都通过缓冲进行。当将数据写入文件时,内核通常先将该数据复制到其中一个缓冲区中,如果该缓冲区尚未写满,则并不将其排入输出队列,而是等待其写满 或者当内核需要重用该缓冲区以便存放其他磁盘块数据时,再将该缓冲排入输出队列,然后待其到达队首时,才进行实际的I/O操作。这种输出方式被称为延迟写 (delayed write)(Ba转载 2015-03-07 11:26:30 · 2266 阅读 · 0 评论 -
linux 线程私有数据 (一键多值)
进程内的所有线程共享进程的数据空间,因此全局变量为所有线程所共有。但有时线程也需要保存自己的私有数据,这时可以创建线程私有数据(Thread-specific Date)TSD来解决。在线程内部,私有数据可以被各个函数访问,但对其他线程是屏蔽的。一个明显的例子是errno,每个线程都有自己的副本,不然由于线程间的切换,在一个线程里输出的很可能是令一线程的出错信息。 线程私有数据采用了一转载 2015-03-18 14:00:37 · 508 阅读 · 0 评论 -
UNIX sigwait函数的用法
#include int sigwait(const sigset_t *restrict set, int *restrict signop);Returns: 0 if OK, error number on failure在使用sigwait函数之前需要将set信号集中的信号阻塞掉,此时调用sigwai函数会阻塞,当set中的信号发生的的时候,因为该信号时被阻塞的原创 2015-03-18 14:53:47 · 841 阅读 · 0 评论 -
Linux C编程 信号量
信号量当我们在多用户系统,多进程系统,或是两者混合的系统中使用线程操作编写程序时,我们经常会发现我们有段临界代码,在此处我们需要保证一个进程(或是一个线程的执行)需要排他的访问一个资源。信号量有一个复杂的编程接口。幸运的是,我们可以很容易的为自己提供一个对于大多数的信号量编程问题足够高效的简化接口。为了阻止多个程序同时访问一个共享资源所引起的问题,我们需要一种方法生成并且使用一个标转载 2015-03-29 14:46:00 · 624 阅读 · 0 评论 -
进程的用户ID探究
作者:程姚根,华清远见嵌入式学院讲师。一、进程与权限A.进程是Linux/Unix操作系统中最重要的抽象之一。B.进程是一个处于执行期的程序(目标代码存储在某种介质上)A process is a program(object code stored on some media) in the midst of execution.而进程在执行过程中经常涉及到文件访问操作等。转载 2015-01-16 12:44:57 · 406 阅读 · 0 评论