unix环境高级编程
文章平均质量分 76
普通网友
这个作者很懒,什么都没留下…
展开
-
什么是文件描述符
当某个程序打开文件时,操作系统返回相应的文件描述符,程序为了处理该文件必须引用此描述符。所谓的文件描述符是一个低级的正整数。最前面的三个文件描述符(0,1,2)分别与标准输入(stdin),标准输出(stdout)和标准错误(stderr)对应。因此,函数 scanf() 使用 stdin,而函数 printf() 使用 stdout。1、首先说什么是文件描述符,它有什么作用?文件转载 2013-07-20 11:46:26 · 7745 阅读 · 0 评论 -
秒杀多线程第一篇 多线程笔试面试题汇总
系列前言 本系列是本人参加微软亚洲研究院,腾讯研究院,迅雷面试时整理的,另外也加入一些其它IT公司如百度,阿里巴巴的笔试面试题目,因此具有很强的针对性。系列中不但会详细讲解多线程同步互斥的各种“招式”,而且会进一步的讲解多线程同步互斥的“内功心法”。有了“招式”和“内功心法”,相信你也能对多线程挥洒自如,在笔试面试中顺利的秒杀多线程试题。 -----转载 2014-02-05 23:03:25 · 804 阅读 · 0 评论 -
我读过的最好的epoll讲解--转自”知乎“
首先我们来定义流的概念,一个流可以是文件,socket,pipe等等可以进行I/O操作的内核对象。 不管是文件,还是套接字,还是管道,我们都可以把他们看作流。 之后我们来讨论I/O的操作,通过read,我们可以从流中读入数据;通过write,我们可以往流写入数据。现在假定一个情形,我们需要从流中读数据,但是流中还没有数据,(典型的例子为,客户端要转载 2013-10-14 20:27:23 · 1126 阅读 · 0 评论 -
LINUX/UNIX 文件状态标志的 与或非 操作
首先,拿open函数举例 int open(const char *pathname, int oflag, ... ); 返回值:成功则返回文件描述符,否则返回 -1 oflag参数所表示的就是文件状态标志所组成的集合,用来说明以什么样的状态打开pathname文件。而此集合是由多个常量的“或”运算构成的 :O_RDONLY原创 2013-08-08 15:13:44 · 2759 阅读 · 0 评论 -
Linux守护进程的编程实现
Linux 守护进程的编程方法 守护进程(Daemon)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。守护进程是一种很有用的进程。Linux的大多数服务器就是用守护进程实现的。比如,Internet服务器inetd,Web服务器httpd等。同时,守护进程完成许多系统任务。比如,作业规划进程crond,打印进程lpd等。 守护进程的编程本转载 2013-08-08 10:49:19 · 534 阅读 · 0 评论 -
应用程序角度看进程与线程
抛开各种技术细节,从应用程序角度讲:1、在单核计算机里,有一个资源是无法被多个程序并行使用的:cpu。没有操作系统的情况下,一个程序一直独占着全都cpu。如果要有两个任务来共享同一个CPU,程序员就需要仔细地为程序安排好运行计划--某时刻cpu和由程序A来独享,下一时刻cpu由程序B来独享而这种安排计划后来成为OS的核心组件,被单独名命为“scheduler”,即“转载 2013-08-08 00:04:17 · 677 阅读 · 0 评论 -
进程与线程的一个简单解释
进程(process)和线程(thread)是操作系统的基本概念,但是它们比较抽象,不容易掌握。最近,我读到一篇材料,发现有一个很好的类比,可以把它们解释地清晰易懂。1.计算机的核心是CPU,它承担了所有的计算任务。它就像一座工厂,时刻在运行。2.假定工厂的电力有限,一次只能供给一个车间使用。也就是说,一个车间开工的时候,其他车间都必须停工。转载 2013-08-07 23:52:49 · 625 阅读 · 2 评论 -
多线程与fork
多线程程序里尽量不使用fork 在多线程程序里,在”自身以外的线程存在的状态”下一使用fork的话,就可能引起各种各样的问题.比较典型的例子就是,fork出来的子进程可能会死锁.请不要,在不能把握问题的原委的情况下就在多线程程序里fork子进程,能引起什么问题呢?那看看实例吧.一执行下面的代码,在子进程的执行开始处调用doit()时,发生死锁的机率会很高.void*原创 2013-08-07 10:32:48 · 660 阅读 · 0 评论 -
pthread_setspecific的一段代码
//IBM developer上copy的。简单明了#include #include #include pthread_key_t key;void echomsg(int t){ printf("destructor excuted in thread %d,param=%d\n",pthread_self(),t);}void * child1(v原创 2013-08-06 20:32:58 · 1263 阅读 · 0 评论 -
linux 下设置用户ID 和 设置组ID 学习笔记
一: 一个进程相关的ID主要有: 实际用户ID 实际组ID : 标识空间我们是谁, 登录时取自口令文件登录项,登录会话期间一直不变,超级用户可改变 有效用户ID 有效组ID : 决定了我们的文件访问权限,也就是用来测试本进程对某些文件的访问权限 保存的设置用户ID,设置组ID: 执行一个程序时包含了有效用户ID 和有效组ID的副本ps: 通常 有效用户ID等于实际用户I转载 2013-07-29 20:45:53 · 1793 阅读 · 0 评论 -
linux的system () 函数详解
linux的system () 函数详解 system(执行shell 命令)相关函数 fork,execve,waitpid,popen表头文件 #i nclude定义函数 int system(const char * string);函数说明转载 2013-08-03 17:15:01 · 548 阅读 · 0 评论 -
ftell函数
函数名: ftell头文件: 功 能: 返回当前文件位置,也就是说返回FILE指针当前位置。函数原型: long ftell(FILE *stream);函数功能:函数 ftell() 用于得到文件位置指针当前位置相对于文件首的偏移字节数。在随机方式存取文件时,由于文件位置频繁的前后移动,程序不容易确定文件的当前位置。使用fs原创 2013-07-25 18:54:04 · 1451 阅读 · 0 评论 -
低速系统调用 与 非阻塞I/O
低速系统调用是可能会使进程永远阻塞的一类系统调用。下面是两种低速调用1. 不带缓存I/O:read,write一个简单的例子:一个进程从终端读取用户的输入,然后再从终端输出。如果用户离开了电脑前,那么系统就会一直等待用户输入,用户永远不回来,系统就永远阻塞(不考虑断电死机这些情况)可以通过设置打开文件描述符的O_NONBLOCK标志位使得read,w转载 2013-07-31 22:33:15 · 1030 阅读 · 0 评论 -
解析Linux特殊文件
您有Dos和Windows经验,就大概知道系统存在若干类型的文件,如系统文件、只读文件、隐含文件等。在Linux/Unix下,文件类型远比Dos/Windows系统多样和复杂。本文以RedHat Linux为例,旨在使读者对Linux下的文件类型有更多的了解。文中的多数内容,对其他发行版的Linux以及Aix、Solaris、Freebsd等操作系统也同样正确。Linux下可以用ls –l 命令来转载 2013-07-24 23:45:45 · 441 阅读 · 0 评论 -
chdir、fchdir 和 getcwd 函数(APUE2 4.22节)
一、 每个进程都有一个当前工作目录,此目录是搜索所有相对路径名的起点(不以斜杠开始的路径名为相对路径名)。当用户登录到 *NIX 系统时,其当前工作目录通常是口令文件(/etc/passwd)中该用户登录项的第 6 个字段--用户的起始目录(home directory)。当前工作目录是进程的一个属性,起始目录则是登录名的一个属性。更改当前工作目录的函数。#include unis转载 2013-07-24 23:21:49 · 664 阅读 · 0 评论 -
Linux多任务编程(三)---exec函数族及其基础实验
exec函数族函数族说明 fork() 函数用于创建一个新的子进程,该子进程几乎复制了父进程的全部内容,但是,这个新创建的子进程如何执行呢?exec 函数族就提供了一个在进程中启动另一个程序执行的方法。它可以根据指定的文件名或目录名找到可执行文件,并用它来取代原调用进程的数据段、代码段和堆栈段,在执行完之后,原调用进程的内容除了进程号外,其他全部被新的进程替换了。另外,这里的可执转载 2013-07-29 15:44:55 · 641 阅读 · 0 评论 -
Linux管道命令
那么一条复杂的Linux命令怎样构成呢?下面来介绍几个技巧。利用输入/输出重定向 在Linux命令行模式中,如果命令所需的输入不是来自键盘,而是来自指定的文件,这就是输入重定向。同理,命令的输出也可以不显示在屏幕上,而是写入到指定文件中,这就是输出重定向。接下来看看标准输入/输出重定向在构造一条Linux命令中的实际应用。1.输入重定向和输出重定向 # wc aa.转载 2013-07-20 13:02:32 · 661 阅读 · 0 评论 -
Linux进程地址空间与虚拟内存
我们知道,在32位机器上linux操作系统中的进程的地址空间大小是4G,其中0-3G是用户空间,3G-4G是内核空间。其实,这个4G的地址空间是不存在的,也就是我们所说的虚拟内存空间。 那虚拟内存空间是什么呢,它与实际物理内存空间又是怎样对应的呢,为什么有了虚拟内存技术,我们就能运行比实际物理内存大的应用程序,它是怎么做到的呢? 呵呵,这一切的一切都是个迷呀,下面我们就一步一步原创 2013-10-14 15:52:21 · 4442 阅读 · 0 评论