Unix环境编程

一、linux的i节点

(1)i节点可以理解为文件的指针,指向文件数据的地址

(2)硬链接,多个i节点指向同一块数据,即使删除源文件,由于i节点中记录了链接数,硬链接也是可以用的。硬链接和源文件可以等同

(3)软链接,i节点的指针(不是数据块的指针),删除源文件后,软链接不可用。

(4)目录项包括文件名和i节点。


参考:http://blog.csdn.net/feiyinzilgd/article/details/5609157

 

二、临时文件和unlink

(1)临时文件使用需要注意两点:要自动生成文件名,避免冲突;要自动删除文件,避免空间浪费。

(2)mkstemp函数将在系统中以独一无二的文件名创建一个文件并打开

(3)随后,调用unlink函数,文件不会删除,因为文件处于打开状态,直到程序退出时,文件才删除

(4)tmpfile = mkstemp + unlink,this function opens a unique temporary file in binary read/write (w+b) mode. The file will be automatically deleted when it is closed or the program terminates.


参考:http://blog.csdn.net/chenfei/article/details/14584  (如何在linux下使用c语言操作临时文件)

 

三、墙上时钟时间

(1)三种时间的定义

时钟时间(墙上时钟时间wall clock time):从进程从开始运行到结束,时钟走过的时间,这其中包含了进程在阻塞和等待状态的时间。
用户CPU时间:就是用户的进程获得了CPU资源以后,在用户态执行的时间。
系统CPU时间:用户进程获得了CPU资源以后,在内核态的执行时间。

(2)三者之间的关系

进程的三种状态为阻塞、就绪、运行。
时钟时间 = 阻塞时间 + 就绪时间 +运行时间
用户CPU时间 = 运行状态下用户空间的时间
系统CPU时间 =  运行状态下系统空间的时间。
用户CPU时间+系统CPU时间=运行时间。

 

四、权限掩码umask

(1)umask作用

用于控制新建文件和目录的默认权限

(2)umask使用

umask的初始值为022,执行umask,显示022;umask 024用于设定默认权限

(3)umask计算

umask初始值为022

新建文件时,没有x,只有w和r,最大为666,则默认权限为644

新建目录时,有x,也有w和r,最大为777,则默认权限为755


参考:http://myswirl.blog.163.com/blog/static/513186422010815113542243/

 

五、存储器分配替换库

1、由于存储器分配出错很难跟踪,某些系统提供了这些函数的其他实现版本。

ptmalloc2是Unix使用的内存分配库

tcmalloc号称比ptmalloc2快,属于gperftools

Hoard 的目标是使内存分配在多线程环境中进行得非常快

nedmalloc是一个跨平台的高性能多线程内存分配库,windows word都使用了这个库

2、C 语言里有一个 alloca 函数,可以在堆栈上分配一块内存,当前函数退出时,由于系统堆栈指针的调整,这块内存会被自动回收。今天,在各种编程文档中已经

不太提倡使用了。因为它有许多不安全因素。

3、牛文:内存管理内幕(动态分配的选择、折衷和实现)http://www.ibm.com/developerworks/cn/linux/l-memory/


六、低速系统调用

定义:

低速系统调用时可能使进程永远阻塞的一类系统调用。如果进程在执行一个低速系统调用而阻塞期间捕获到一个信号,则该系统调用就被中断不再继续执行。该系统调用返回出错,其errno被设置为EINTR。

类型:不带缓存I/O:read,write

一个进程从终端读取用户的输入,然后再从终端输出。如果用户离开了电脑前,那么系统就会一直等待用户输入,用户永远不回来,系统就永远阻塞。

            打开某种类型的文件

如果某进程为读打开FIFO,且此时没有为写的进程打开该FIFO。如果没有设置O_NONBLOCK标志位,那么open函数会阻塞直至其他某个进程为写而打开该FIFO;类似地,只写open会阻塞到其他某个进程为读而打开该FIFO。

解决方法:重新启动

again:

        if( ( n = read(fd, buf,BUFFSIZE) ) < 0 )

        {

             if(errno == EINTR)

                     goto again;

        }

更多 0


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值