E-COM-NET
首页
在线工具
Layui镜像站
SUI文档
联系我们
推荐频道
Java
PHP
C++
C
C#
Python
Ruby
go语言
Scala
Servlet
Vue
MySQL
NoSQL
Redis
CSS
Oracle
SQL Server
DB2
HBase
Http
HTML5
Spring
Ajax
Jquery
JavaScript
Json
XML
NodeJs
mybatis
Hibernate
算法
设计模式
shell
数据结构
大数据
JS
消息中间件
正则表达式
Tomcat
SQL
Nginx
Shiro
Maven
Linux
《Unix环境高级编程》
关于我最近看的一本书——大名鼎鼎的APUE
APUE,Knowas《
Unix环境高级编程
》,我每天都在用自己的绳命去看,每天都燃烧自己去看什么样的书,一看就是上乘之中的珍稀之品?这本。
诚实的偷包贼
·
2013-07-23 10:54
Linux
杂谈
Unix
Linux
apue
关于我最近看的一本书——大名鼎鼎的APUE
APUE,Knowas《
Unix环境高级编程
》,我每天都在用自己的绳命去看,每天都燃烧自己去看什么样的书,一看就是上乘之中的珍稀之品?这本。
fanfanK
·
2013-07-23 10:00
linux
unix
apue
UNIX环境高级编程
——TCP/IP网络编程
常用网络信息检索函数gethostname()getpeername()getsockname()gethostbyname()gethostbyaddr()getprotobyname()getprotobynumber()getservbyname()getservbyport()网络属性设置头文件:#include#include 获取一个套接口选项int getsockopt(
ctthunagchneg
·
2013-07-19 15:00
UNIX环境高级编程
——网络编程常用函数及结构
IP地址的转换#include int inet_aton(constchar*strptr, structin_addr*addrptr);//将strptr字符串转换成32位的网络字节序(二进制值--a.b.c.d->32)。int_addr_t inet_addr(constchar*strptr)//功能通上,返回地址。in_addraddr;addr.s_addr=i
ctthunagchneg
·
2013-07-19 14:00
UNIX环境高级编程
——进程管理和通信(总结)
进程管理与通信进程的管理进程和程序的区别:进程:程序的一次执行过程 动态过程,进程的状态属性会发生变化程序:存放在磁盘上的指令、数据的有序集合 是个文件,可直观看到程序program静态的概念,本身不会发生变化。指令谁来执行,数据谁来访问?cpu!但前提是cpu能够接触到,程序执行过程需要cpu、内存、以及相关的资源。进程是动态的,需要执行时才创建,运行结束要回收,包括创建、调度、执行、消亡的过程
ctthunagchneg
·
2013-07-19 12:00
UNIX环境高级编程
——线程和信号
每个线程都有自己的信号屏蔽字,但是信号的处理是进程中所有线程共享的。这意味着尽管单个线程可以阻止某些信号,但当线程修改了与某个信号相关的处理行为以后,所有的线程都必须共享这个处理行为的改变。这样如果一个信号选择忽略某个信号,而其他的线程可以恢复信号的默认处理行为,或者为信号设置一个新的处理程序,从而可以撤销上述线程的信号选择。 进程中的信号是送到单个线程的,如果信号与硬件故障或者计时器超
ctthunagchneg
·
2013-07-18 17:00
UNIX环境高级编程
——线程和fork
当线程调用fork时,就为子进程创建了整个进程地址空间的副本。子进程通过继承整个地址空间的副本,也从父进程那里继承了所有互斥量、读写锁和条件变量的状态。如果父进程包含多个线程,子进程在fork返回以后,如果紧接着不是马上调用exec的话,就需要清理锁的状态。 在子进程内部只存在一个线程,它是由父进程中调用fork的线程的副本构成的。如果父进程中的线程占有锁,子进程同样占有这些锁。问题是子
ctthunagchneg
·
2013-07-18 17:00
UNIX环境高级编程
——线程私有数据
线程私有数据(Thread-specificdata,TSD):存储和查询与某个线程相关数据的一种机制。在进程内的所有线程都共享相同的地址空间,即意味着任何声明为静态或外部变量,或在进程堆声明的变量,都可以被进程内所有的线程读写。一个线程真正拥有的唯一私有存储是处理器寄存器,栈在“主人”故意暴露给其他线程时也是共享的。有时需要提供线程私有数据:可以跨多个函数访问(全局);仅在某个线程有效(私
ctthunagchneg
·
2013-07-17 17:00
UNIX环境高级编程
——互斥量属性
互斥量具有一些属性,通过修改这些属性可以控制锁的一些行为。缺省的互斥锁属性及其值如下:pshared: PTHREAD_PROCESS_PRIVATEtype: PTHREAD_MUTEX_DEFAULTprotocol: PTHREAD_PRIO_NONEprioceiling: – robustness: P
ctthunagchneg
·
2013-07-17 16:00
UNIX环境高级编程
——线程属性之分离属性
说到线程的分离状态,我认为,之所以会有这个状态,是因为系统对某些线程的终止状态根本不感兴趣导致的。 我们知道,进程中的线程可以调用:intpthread_join(pthread_ttid,void**rval_ptr); 来等待某个线程的终止,获得该线程的终止状态,并收回所占的资源。如果对线程的返回状态不感兴趣,可以将rval_ptr设置为NULL。也可以调用:intpthread
ctthunagchneg
·
2013-07-17 16:00
UNIX环境高级编程
——线程属性之并发度
并发度控制着用户级线程可以映射的内核线程或进程的数目。如果操作系统的实现在内核级的线程和用户级的线程之间保持一对一的映射,那么改变并发度并不会有什么效果,因为所有的用户级线程都可能被调度到。但是,如果操作系统的实现让用户级线程到内核级线程或进程之间的映射关系是多对一的话,那么在给定时间内增加可运行的用户级线程数,可能会改善性能。 pthread_setconcurrency函数可以用于提
ctthunagchneg
·
2013-07-17 15:00
apue.h头文件
最近在学习UNIX的编程,用的书是《
UNIX环境高级编程
》,看到书中有很有实例,我用的操作系统是RadHat,照着书把程序清单输入后编译却通不过,显示的错误是没有“apue.h头文件”。
hyg0811
·
2013-07-17 09:00
apue.h头文件
最近在学习UNIX的编程,用的书是《
UNIX环境高级编程
》,看到书中有很有实例,我用的操作系统是RadHat,照着书把程序清单输入后编译却通不过,显示的错误是没有“apue.h头文件”。
夏雪冬日
·
2013-07-17 09:00
UNIX环境高级编程
——pthread_create的问题
linux下常用的创建多线程函数pthread_create(pthread_t*thread,pthread_attr_t*attr,void*(*start_routine)(void*),void*args);其中第一个参数用来保存线程信息,第二个参数指新线程的运行属性,可以设置为NULL,第三个参数为自定义的线程函数,第四个参数就是线程函数需要用到的参数,一般如果要传递多个参数,可以
ctthunagchneg
·
2013-07-16 12:00
UNIX环境高级编程
——主线程与子线程的退出关系
我们在一个线程中经常会创建另外的新线程,如果主线程退出,会不会影响它所创建的新线程呢?下面就来讨论一下。1、 主线程等待新线程先结束退出,主线程后退出。正常执行。示例代码:#include #include #include #include #include pthread_tntid;//线程ID voidprintids(constchar*s) { pid_tpid; pthread_
ctthunagchneg
·
2013-07-16 11:00
UNIX环境高级编程
——线程
线程包含了表示进程内执行环境必需的信息,其中包括进程中标示线程的线程ID、一组寄存器值、栈、调度优先级和策略、信号屏蔽字、errno变量以及线程私有数据。 进程的所有信息对该进程的所有线程都是共享的,包括可执行的程序文本、程序的全局内存和堆内存、栈以及文件描述符。线程标识: 进程ID在整个系统中是唯一的,但线程ID不同,线程ID只在它所属的进程环境中有效。进程ID的数据结构为pid_
ctthunagchneg
·
2013-07-15 17:00
UNIX环境高级编程
——IPC总结
IPC主要包括:管道,消息队列,信号量,共享内存,套接字(SOCKET)。一、IPC对象的持久性 每种IPC机制都会借助一种数据结构,这种数据结构的实例称为该IPC机制的对象(相应的,用于同步互斥的数据结构的实体也可以称为该机制的对象)。理清IPC对象的持久性,有助于理解相应的IPC的工作机制。1.对象持久性 大致上IPC对象的持久性可以分为三种:进程持久性:具有这种持久性的对象在持
ctthunagchneg
·
2013-07-15 17:00
UNIX环境高级编程
——select和epoll的区别
select和epoll都用于监听套接口描述字上是否有事件发生,实现I/O复用select(轮询)#include #include intselect(intmaxfdpl,fd_set*readset,fd_set*writeset,fd_set*exceptset,conststructtimeval*timeout) 调用时轮询一次所有描述字,超时时再轮询一次。如果没有描述字准备好,则
ctthunagchneg
·
2013-07-15 15:00
UNIX环境高级编程
——epoll函数使用详解
epoll-I/Oeventnotificationfacility 在linux的网络编程中,很长的时间都在使用select来做事件触发。在linux新的内核中,有了一种替换它的机制,就是epoll。 相比于select,epoll最大的好处在于它不会随着监听fd数目的增长而降低效率。因为在内核中的select实现中,它是采用轮询来处理的,轮询的fd数目越多,自然耗时越多。 并
ctthunagchneg
·
2013-07-15 15:00
UNIX环境高级编程
——select、poll和epoll
一、select select目前几乎在所有的平台上支持,其良好跨平台支持也是它的一个优点,事实上从现在看来,这也是它所剩不多的优点之一。 select的一个缺点在于单个进程能够监视的文件描述符的数量存在最大限制,在Linux上一般为1024,不过可以通过修改宏定义甚至重新编译内核的方式提升这一限制。 另外,select()所维护的存储大量文件描述符的数据结构,随着文件描述符数量的增大,
ctthunagchneg
·
2013-07-15 15:00
UNIX环境高级编程
——I/O多路转接(select、pselect和poll)
I/O多路转接:先构造一张有关描述符的列表,然后调用一个函数,直到这些描述符中的一个已准备好进行I/O时,该函数才返回。在返回时,它告诉进程哪些描述符已准备好可以进行I/O。 poll、pselect和select这三个函数使我们能够执行I/O多路转接。一、select函数在所有依从POSIX的平台上,select函数使我们可以执行I/O多路转接。传向select的参数告诉内核:我们所关
ctthunagchneg
·
2013-07-15 11:00
UNIX环境高级编程
——非阻塞设置
非阻塞I/O使我们可以调用open、read和write这样的I/O操作,并使这些操作不会永远阻塞。如果这种操作不能完成,则调用立即出错返回,表示该操作如继续执行将阻塞。对于一个给定的描述符有两种方法对其指定非阻塞:(1)如果调用open获得描述符,则可指定O_NONBLOCK标志。(2)对于已经打开的一个描述符,则可调用fcntl,由该函数打开O_NONBLOCK文件标志。
ctthunagchneg
·
2013-07-15 10:00
2010-07-10再次受教育
成成 23:33:18恩,操作系统相当重要好好研究L-K 23:33:17和《
Unix环境高级编程
》L-K 23:33:30还有《数据库系统基础教程》成成 23:33:31恩,能往unix发展是最好L-K
公羊角
·
2013-07-14 20:14
oracle
linux
操作系统
数据库系统
学数据库
UNIX环境高级编程
——记录上锁(fcntl函数)以及死锁检测
一、记录锁recordlocking 功能:当一个进程正在读或修改文件的某个部分时,它可以阻止其它进程修改同一文件区。 字节范围锁byte-rangelocking 二、历史 flock函数,可以锁整个文件,不能锁文件中的一部分。 fcntl函数,增加了记录锁的功能。 lockf函数,在fcntl基础上构造了lockf函数,提供一个简化的接口。可以锁文件中任意字节数的区域 三、fcntl记录锁 函
ctthunagchneg
·
2013-07-10 11:00
UNIX环境高级编程
——存储映射I/O(mmap函数)
共享内存可以说是最有用的进程间通信方式,也是最快的IPC形式,因为进程可以直接读写内存,而不需要任何数据的拷贝。对于像管道和消息队列等通信方式,则需要在内核和用户空间进行四次的数据拷贝,而共享内存则只拷贝两次数据:一次从输入文件到共享内存区,另一次从共享内存区到输出文件。实际上,进程之间在共享内存时,并不总是读写少量数据后就解除映射,有新的通信时,再重新建立共享内存区域。而是保持共享区域,直
ctthunagchneg
·
2013-07-09 10:00
UNIX环境高级编程
——System V 共享内存区
共享内存区域是被多个进程共享的一部分物理内存。如果多个进程都把该内存区域映射到自己的虚拟地址空间,则这些进程就都可以直接访问该共享内存区域,从而可以通过该区域进行通信。共享内存是进程间共享数据的一种最快的方法,一个进程向共享内存区域写入了数据,共享这个内存区域的所有进程就可以立刻看到其中的内容。这块共享虚拟内存的页面,出现在每一个共享该页面的进程的页表中。但是它不需要在所有进程的虚拟内存中
ctthunagchneg
·
2013-07-08 14:00
UNIX环境高级编程
——system V消息队列
unix早期通信机制中的信号能够传送的信息量有限,管道则只能传送无格式字节流,这远远是不够的。 消息队列(也叫报文队列)客服了这些缺点: 消息队列就是一个消息的链表。 可以把消息看作一个记录,具有特定的格式。 进程可以按照一定的规则向消息队列中添加新消息;另一些进程可以从消息队列中读走消息。 消息队列是随内核持续的,只有内核重启或人工删除时,该消息队列才会被删除。
ctthunagchneg
·
2013-07-08 10:00
UNIX环境高级编程
——进程间通讯方法整理
一.无名管道pipe#include intpipe(intfd[2])二.fifo#include intmkfifo(constchar*path,mode_tmode);三.信号#include void(*signal(intsig,void(*func)(int)))(int);#include intsigaction(intsig,conststructsigaction*restr
ctthunagchneg
·
2013-07-07 18:00
UNIX环境高级编程
——system V信号量
1.信号量(semaphore)主要用于保护临界资源。进程可以根据它判断是否能访问某些共享资源。信号量除了用于访问控制外,还可用于进程同步,也就是进程间通信。2.信号量分类:a.二值信号量:信号量的值只能取0或1,类似于互斥锁mutex,但两者又不同:mutex与二值信号量的区别:信号量强调共享资源,只要共享资源可用,其他进程同样可以修改信号量的值;互斥锁更强调进程,占用资源的进程使用完资源后,必
ctthunagchneg
·
2013-07-07 18:00
UNIX环境高级编程
——创建与打开IPC通道
创建或打开一个IPC对象的三个getXXX函数的第一个参数key是类型为key_t的IPC键,返回值identifier是一个整数标识符。该标识符不同于ftok函数的id参数。对于key值,应用程序有两种选择。(1)调用ftok,给它传递pathname和id。(2)指定key为IPC_PRIVATE,这将保证创建一个新的,唯一的IPC对象。key_tftok(constchar*pathname
ctthunagchneg
·
2013-07-07 18:00
UNIX环境高级编程
——守护进程列表
amd:自动安装NFS(网络文件系统)守侯进程apmd:高级电源治理Arpwatch:记录日志并构建一个在LAN接口上看到的以太网地址和ip地址对数据库Autofs:自动安装治理进程automount,与NFS相关,依靠于NISBootparamd:引导参数服务器,为LAN上的无盘工作站提供引导所需的相关信息crond:linux下的计划任务Dhcpd:启动一个DHCP(动态IP地址分配)服务器G
ctthunagchneg
·
2013-07-07 14:00
UNIX环境高级编程
——信号说明列表
$kill-l 1)SIGHUP2)SIGINT3)SIGQUIT4)SIGILL 5)SIGTRAP6)SIGABRT7)SIGBUS8)SIGFPE 9)SIGKILL10)SIGUSR111)SIGSEGV12)SIGUSR2 13)SIGPIPE14)SIGALRM15)SIGTERM16)SIGSTKFLT17)SIGCHLD 18)SIGCONT19)SIGSTOP20)SIGTSTP
ctthunagchneg
·
2013-07-07 14:00
UNIX环境高级编程
——进程间通信概念
进程间通信---IPC1.进程间通信的目的a.数据传输:一个进程需要将他的数据发送给另一个进程b.资源共享:多个进程之间共享同样的资源c.通知事件:一个进程需要向另一个或一组进程发送消息,通知它们发生了某种事件。d.进程控制:有些进程希望完全控制另一个进程的执行(如debug进程),此时控制进程希望能拦截另一个进程的所有操作,并能够及时直到它的状态改变。2.linux进程间通信发展:linux进程
ctthunagchneg
·
2013-07-07 14:00
UNIX环境高级编程
——守护进程
一、守护进程简介守护进程,也就是通常说的Daemon进程,是Linux中的后台服务进程。它是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。守护进程常常在系统引导装入时启动,在系统关闭时终止。Linux系统有很多守护进程,大多数服务都是通过守护进程实现的,同时,守护进程还能完成许多系统任务,例如,作业规划进程crond、打印进程lqd等(这里的结尾字母d就
ctthunagchneg
·
2013-07-07 14:00
UNIX环境高级编程
——信号
一、信号生命周期 从信号发送到信号处理函数的执行完毕。 对于一个完整的信号生命周期(从信号发送到相应的处理函数执行完毕)来说,可以分为三个重要的阶段,这三个阶段由四个重要事件来刻画:信号诞生;信号在进程中注册完毕;信号在进程中的注销完毕;信号处理函数执行完毕。相邻两个事件的时间间隔构成信号生命周期的一个阶段。下面阐述四个事件的实际意义:1. 信号"诞生"。信号的诞生指的是触发信号的事件发生
ctthunagchneg
·
2013-07-07 13:00
UNIX环境高级编程
——sigqueue、sigsuspend函数
一、sigqueue函数功能:新的发送信号系统调用,主要是针对实时信号提出的支持信号带有参数,与函数sigaction()配合使用。intsigqueue(pid_tpid,intsig,constunionsigvalvalue);参数: sigqueue的第一个参数是指定接收信号的进程id,第二个参数确定即将发送的信号,第三个参数是一个联合数据结构unionsigval,指定了信号传递的参
ctthunagchneg
·
2013-07-07 10:00
UNIX环境高级编程
——可靠信号与不可靠信号
在早期的UNIX中信号是不可靠的,不可靠在这里指的是:信号可能丢失,一个信号发生了,但进程却可能一直不知道这一点。 现在Linux在SIGRTMIN实时信号之前的都叫不可靠信号,这里的不可靠主要是不支持信号队列,就是当多个信号发生在进程中的时候(收到信号的速度超过进程处理的速度的时候),这些没来的及处理的信号就会被丢掉,仅仅留下一个信号。 可靠信号是多个信号发送到进程的时候(收到信号
ctthunagchneg
·
2013-07-07 09:00
UNIX环境高级编程
——信号(API)
一、信号在内核中的表示 实际执行信号的处理动作称为信号递达(Delivery),信号从产生到递达之间的状态,称为信号未决(Pending)。进程可以选择阻塞(Block)某个信号。被阻塞的信号产生时将保持在未决状态,直到进程解除对此信号的阻塞,才执行递达的动作。注意,阻塞和忽略是不同的,只要信号被阻塞就不会递达,而忽略是在递达之后可选的一种处理动作。信号在内核中的表示可以看作是这样的:每个信号都
ctthunagchneg
·
2013-07-06 21:00
UNIX环境高级编程
——信号之kill、raise、killpg、alarm、pause、abort、sleep、usleep、nanosleep和setitimer函数
一、kill,raise,killpg函数intkill(pid_tpid,intsig); intraise(intsig); intkillpg(intpgrp,intsig);kill命令是调用kill函数实现的,kill函数可以给一个指定的进程或进程组发送指定的信号,其中kill函数的pid参数取值不同表示不同含义,具体可man一下。raise函数可以给当前进程发送指定的信号(自己给自己发
ctthunagchneg
·
2013-07-06 17:00
UNIX环境高级编程
——信号基本概述和signal函数
一、为了理解信号,先从我们最熟悉的场景说起:1.用户输入命令,在Shell下启动一个前台进程。2.用户按下Ctrl-C,这个键盘输入产生一个硬件中断。3.如果CPU当前正在执行这个进程的代码,则该进程的用户空间代码暂停执行,CPU从用户态切换到内核态处理硬件中断。4.终端驱动程序将Ctrl-C解释成一个SIGINT信号,记在该进程的PCB中(也可以说发送了一个SIGINT信号给该进程)。5.当某个
ctthunagchneg
·
2013-07-06 16:00
UNIX环境高级编程
——进程关系
一、终端的概念在UNIX系统中,用户通过终端登录系统后得到一个Shell进程,这个终端成为Shell进程的控制终端(ControllingTerminal),控制终端是保存在PCB中的信息,而我们知道fork会复制PCB中的信息,因此由Shell进程启动的其它进程的控制终端也是这个终端。默认情况下(没有重定向),每个进程的标准输入、标准输出和标准错误输出都指向控制终端,进程从标准输入读也就是读用户
ctthunagchneg
·
2013-07-06 15:00
UNIX环境高级编程
——system函数
system函数功能:调用fork产生子进程,由子进程来调用;/bin/sh-ccommand来执行参数command所代表的命令,阻塞当前进程直到command命令执行完毕。intsystem(constchar*command);因为system在其实现中调用了fork、exec和waitpid,因此有三种返回值:(1)如果fork失败或者waitpid返回除EINTR之外的出错,则syste
ctthunagchneg
·
2013-07-06 15:00
UNIX环境高级编程
——进程基本概述
一、什么是进程从用户的角度来看进程是程序的一次执行过程。从操作系统的核心来看,进程是操作系统分配的内存、CPU时间片等资源的基本单位。进程是资源分配的最小单位。每一个进程都有自己独立的地址空间与执行状态。像UNIX这样的多任务操作系统能够让许多程序同时运行,每一个运行着的程序就构成了一个进程。二、进程数据结构进程的静态描述:由三部分组成:PCB、有关程序段和该程序段对其进行操作的数据结构集。进程控
ctthunagchneg
·
2013-07-06 11:00
UNIX环境高级编程
——进程控制
一、进程标识符 ID为0的进程是调度进程,常常被称为交换进程。该进程是内核的一部分,它并不执行任何磁盘上的程序,因此也被称为系统进程。进程ID1通常是init进程,在自举过程结束时由内核调用。init通常读与系统有关的初始化文件,并将系统引导到一个状态(例如多用户)。init进程决不会终止。它是一个普通的用户进程,但是它以超级用户特权运行。pid_tgetpid(void);返回值:调用进程的
ctthunagchneg
·
2013-07-06 11:00
UNIX环境高级编程
——进程环境
一、main函数 C程序总是从main函数开始。当内核执行C程序时,在调用main前先调用一个特殊的启动例程。可执行程序文件将此启动例程指定为程序的起始地址——这是由连接编译器设置的,而连接编译器则由C编译器调用(通常是cc)。启动例程从内核取得命令行参数和环境变量值。然后调用main函数。二、进程终止有8种方式使进程终止,其中5种为正常终止,它们是:(1)从main返回(2)调用exit(3
ctthunagchneg
·
2013-07-06 09:00
UNIX环境高级编程
——时间和日期
由UNIX内核提供的基本时间服务是计算自国际标准时间公元1970年1月1日00:00:00以来经过的秒数。这种秒数是以数据类型time_t表示。 1. time函数返回当前时间和日期:time_ttime(time_t*calptr); 时间值总是作为函数返回。如果参数不为空,则时间值也存放在由calptr指向的单元内。2. 与time函数相比,gettimeofday提供了更
ctthunagchneg
·
2013-07-05 17:00
UNIX环境高级编程
——Linux进程地址空间和虚拟内存
一、虚拟内存分段机制:即分成代码段,数据段,堆栈段。每个内存段都与一个特权级相关联,即0~3,0具有最高特权级(内核),3则是最低特权级(用户),每当程序试图访问(权限又分为可读、可写和可执行)一个段时,当前特权级CPL就会与段的特权级进行比较,以确定是否有权限访问。每个特权级都有自己的程序栈,当程序从一个特权级切换到另一个特权级上执行时,堆栈段也随之改换到新级别的堆栈中。段选择符:每个段都有一个
ctthunagchneg
·
2013-07-05 17:00
UNIX环境高级编程
——标准I/O库函数和Unbuffered I/O函数
以写文件为例,C标准I/O库函数(printf(3)、putchar(3)、fputs(3))与系统调用write(2)的关系如下图所示。 库函数与系统调用的层次关系open、read、write、close等系统函数称为无缓冲I/O(UnbufferedI/O)函数,因为它们位于C标准库的I/O缓冲区的底层。用户程序在读写文件时既可以调用C标准I/O库函数,也可以直接调用底层的Unbuffere
ctthunagchneg
·
2013-07-05 16:00
UNIX环境高级编程
——标准I/O库缓冲区和内核缓冲区的区别
1.C标准库的I/O缓冲区 UNIX的传统是Everythingisafile,键盘、显示器、串口、磁盘等设备在/dev目录下都有一个特殊的设备文件与之对应,这些设备文件也可以像普通文件(保存在磁盘上的文件)一样打开、读、写和关闭,使用的函数接口是相同的。用户程序调用C标准I/O库函数读写普通文件或设备,而这些库函数要通过系统调用把读写请求传给内核,最终由内核驱动磁盘或设备完成I/O操作。
ctthunagchneg
·
2013-07-05 13:00
UNIX环境高级编程
——标准I/O库
对一个进程预定义了三个流,并且这三个流可以自动的被进程使用,它们是:标准输入、标准输出、和标准错误。 标准I/O库提供缓冲的目的是尽可能减少使用read和write的次数。 标准I/O库提供了三种类型的缓冲:(1)全缓冲:在填满标准I/O缓冲区后进行实际I/O操作。对于驻留在磁盘上的文件通常是由标准I/O库实施全缓冲的。在标准I/O库方面,flush(冲洗)意味着将缓冲区中的内容写到磁盘
ctthunagchneg
·
2013-07-05 12:00
上一页
19
20
21
22
23
24
25
26
下一页
按字母分类:
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
其他