unix 环境高级编程
文章平均质量分 81
ctreewang
这个作者很懒,什么都没留下…
展开
-
unix环境高级编程-1.8-用户标识
1.用户ID口令文件登录项中的用户ID是个数值,他向系统标识各个不同的用户。每个用户拥有为一个用户ID,下面介绍内核如何使用用户ID检验该用户是否有执行某些操作的权限。 用户ID为0的用户为root用户或者叫超级用户。操作系统对系统有自由支配权。2.组ID原创 2011-10-15 20:09:25 · 1527 阅读 · 6 评论 -
unix 高级环境编程-1.9-信号
信号 是通知进程已发生某猪情况的一种技术。进程对信号处理有三种选择忽略该信号。按系统默认方式处理。如当除数为0时候,系统默认方式为终止改进程。提供一个函数。信号发生时候则调用改函数,这称扑捉信号。使用这种方式,我们可以提供自编函数能知道什么时候产生信号了,并按照自己的原创 2011-10-15 20:51:55 · 1837 阅读 · 1 评论 -
unix环境高级编程-1.7-出错处理
当unix出错时,经常返回一个负值,而且整形变量erron通常被设置为含有附加信息的一个值。例如open函数如果成功执行则返回一个非负的的文件描述符。如果出错则返回-1。在open出错时,大约有15钟不同的errno值。有些函数以另一种形式返回。 多个线程翻译 2011-10-15 19:27:20 · 1155 阅读 · 1 评论 -
UNIX 系统家族树的详细历史(图)
下面的图表显示今天的主要版本的Unix和类Unix操作系统的历史和发展道路。从此幅图可以清晰看到unix的家族史,其中让我注意一历史系统:SVR4,4.4BSD,FreeBSD,Linux,MAC OS X,Solaris.了解unix历史,让我们明白unix本身,产原创 2011-10-16 15:44:53 · 8048 阅读 · 0 评论 -
unix 环境高级编程-3-文件I/O(3.1~3.9)
3.2文件描述符 对内核而言,所有打开的文件都通过文件描述符引用。文件描述符是一个非负整数。当打开一个现有文件或者创建一个新文件时,内核向进城返回一个文件描述符。当读或者写一个问一个文件时候,使用open或者create返回文件描述符标识该文件。将其作为参数传递给原创 2011-10-16 21:27:52 · 1620 阅读 · 9 评论 -
网络文件系统(NFS)(转载)
Reorganized and enhanced by Tom Rhodes. Written byBill Swingle. 网络文件系统是FreeBSD支持的文件系统中的一种, 也被称为 NFS。 NFS允许一个系统在网络上与它人共享目录和文件。通过使用NFS,用户和程原创 2011-10-17 21:15:52 · 1008 阅读 · 0 评论 -
unix环境高级编程-文件读取,同步机制
3.12 dup和dup2函数下面的两个函数用来赋值一个现存的文件描述符#include int dup(int filedes); int dup2(int filedes,int filedes2);成功则返回新的文件描述符,若出错则返回-1;原创 2011-10-18 00:09:09 · 1966 阅读 · 4 评论 -
unix环境高级编程-2.2-unix标准化
2.2.1 IOS C ISO C 标准定义的头文件ISO C标准定义的头文件(24项) ---------------------- 验证程序断言 ---------------------- 支持复数算术运算原创 2011-10-16 14:18:00 · 1170 阅读 · 0 评论 -
unix环境高级编程-文件和目录-stat,fstate,lstat函数
stat,fstate,lstat函数首先看一下函数定义#include int stat (const char *restrict pathname,struct stat* restrict buf)int fstat(int filedes,struct s原创 2011-10-18 22:17:25 · 8043 阅读 · 7 评论 -
unix环境高级编程-3.10-文件共享
unix系统支持在不同进程间共享打开的文件。 内核使用三种数据结果表示打开的文件。(1)每个进程在进程表中都有一个记录项,记录项中包含有一张打开文件的描述符表,可将其视为一个矢量,每个描述符占用一项。 每个文件描述符相关连的是: 文件描述符原创 2011-10-17 21:42:02 · 2422 阅读 · 7 评论 -
unix环境高级编程-4.3-文件类型
我们都知道在unix系统中,文件分为两种--------普通文件和目录。unix大多数都是这些文件类型。但是也有另外一种。下面简单介绍一下文件类型:(1)普通文件。最常见的文件类型。(2)目录文件。这种文件包含了其他文件的名字以及指向与这些文件有关的信息指针。对一个目原创 2011-10-18 23:01:16 · 2645 阅读 · 0 评论 -
unix环境高级编程-3.11-原子操作
上一节,我们学习了多个进程打开同一个文件,和单个进程打开多个文件原理。1.填写至一个文件早期的unix系统将数据添加文件尾端如下代码if(lseek(fd,0l,2)<0 err_sys("lseek error");if(write(fd,buf,100)原创 2011-10-17 22:32:21 · 1866 阅读 · 1 评论 -
unix环境高级编程-系统是如何设置文件权限的
4.4 设置用户ID和设置组ID与一个进程相关联的ID有6个或更多,如下表所示: 与每个进程相关联的用户ID和组ID实际用户ID实际组ID我们实际上是谁,这两个字段在登录时取自口令文件中的登录项,通常在登录会话期间这些值不会改变,但root进程可改变他们。有效用户ID有效组ID附加组ID规定原创 2011-10-19 21:14:55 · 1948 阅读 · 0 评论 -
unix环境高级编程-4.8-umask函数
自此我们已经说明了每个文件相关联的9个访问权限位。在此基础上,我们可以说明与每个进程相关联的文件模式创新屏蔽字。umask函数为进程设置文件模式创建屏蔽字,并返回以前的值。#include mode_t umask(mode_t cmask);查看GNU C手册。mode_t umask (mode t mask) [Function]The umask function原创 2011-10-20 19:23:53 · 4645 阅读 · 0 评论 -
unix环境高级编程-4.7-access函数
如前所述,当用open函数打开一个文件的时候,内核以进程的有效用户ID和有效组ID,为基础执行期访问权限测试。有时候,进程也希望按期实际用户ID,和实际组ID,来测试访问能力。access函数是按照实际用户ID和实际组ID,进行访问权限测试的。 #includeint access (const char*pathname,int mode); 返回值:成功返回0,出错返原创 2011-10-20 11:09:10 · 3824 阅读 · 0 评论 -
简单指导C++ Templates
1. 模板的基本语法模板通常是用一对尖括号给括起来。如: Content内容可以是:a) class T / typename Tb) 一种数据类型,关联T其中T 就是代表了一种数据类型。下面用一个几段代码来演示一下void PrintTwice(int data){ cout << "Twice is: " << data *翻译 2011-10-22 10:03:29 · 1163 阅读 · 2 评论 -
unix环境高级编程-4.11-chown,fchown和lchown函数
接下来讲的函数主要是用来更改文件的用户ID和,组ID。#include int chown(const char* pathname,uid_t owner,gid_t group);int fchown(int filedes,uid_t owner,gid_t growp);int lchown(const char* pathname,uid_t owner,gid_t gr原创 2011-10-21 22:31:43 · 3537 阅读 · 0 评论 -
进程同步的几种机制
多进程的系统中避免不了进程间的相互关系。本讲将介绍进程间的两种主要关系——同步与互斥,然后着重讲解解决进程同步的几种机制。 进程互斥是进程之间发生的一种间接性作用,一般是程序不希望的。通常的情况是两个或两个以上的进程需要同时访问某个共享变量。我们一般将发生能够问共享变量的程序段称为临界区。两个进程不能同时进入临界区,否则就会导致数据的不一致,产生与时间有关的错误。解决互斥问题应该满原创 2011-10-21 23:54:30 · 13679 阅读 · 0 评论 -
unix环境高级编程-4.14-文件系统
文件系统为了说明文件连接的概念,先要介绍UNIX文件系统的基本结构,同时,了解i节点和志向i将诶点的目录项之间的区别也是很有益处的。目前正在使用的UNIX文件系统有多种实现。例如,SOLARIS支持多种不同类型的磁盘文件系统:传统的机遇BSD的unix文件系统,ufs,读写DOS格式哈软盘的文件系统,以及读CD的文件系统。本节讨论的是UFS。我们可以把一个磁盘氛围一个或者多个分区。每个原创 2011-10-22 16:44:17 · 1809 阅读 · 0 评论 -
unix环境高级编程-4.15-link,unlink,remove和rename函数
如上节所述,任何一个文件可以有多个目录项指向其i节点。创建一个指向现有文件的链接的方法是使用link函数。#include int link(const char* existingpath,const char* new path);若成功返回0,出错则返回-1;int link (const char *oldname, const char *newname) [F原创 2011-10-22 18:11:00 · 6449 阅读 · 1 评论 -
Linux下的多线程编程(转载)
1 引言 线程(thread)技术早在60年代就被提出,但真正应用多线程到操作系统中去,是在80年代中期,solaris是这方面的佼佼者。传统的Unix也支持线程的概念,但是在一个进程(process)中只允许有一个线程,这样多线程就意味着多进程。现在,多线程技术已经被许多操作系统所支持,包括Windows/NT,当然,也包括Linux。 为什么有了进程的概念后,还要再引入线程呢?使用原创 2011-10-24 09:01:40 · 4487 阅读 · 0 评论 -
unix环境高级编程-4.16-符号链接
符号链接是指向一个文件的间接指针。他与上一节所诉的硬链接不同。硬链接直接指向文件的i节点。引入符号链接的原因是为了避开硬链接的一些限制。硬链接通常要求链接和文件位于同一文件系统中。只有超级用户才能创建指向目录的硬链接。对符号链接以及他指向何种对象并无任何文件系统限制。任何用户都可以创建指向目录的符号链接。符号链接一般用于将一个文件或这个目录结构移动到系统中的另一个位置。 当使用原创 2011-10-24 22:24:33 · 2168 阅读 · 0 评论 -
Linux下的多进程编程初步(转载)
最近在学习linux环境高级编程,多进程编程算是编程中的最重要的一个部分了,本文让我学习和明白了很多,所以转载过来。让更多想多线程编程的人学习。只有顶到首页才能让更多的人学习。文章摘要: 多线程程序设计的概念早在六十年代就被提出,但直到八十年代中期,Unix系统中才引入多线程机制,如今,由于自身的许多优点,多线程编程已经得到了广泛的应用。本文我们将介绍在Linux下编写多进程和多线程原创 2011-10-24 00:11:17 · 52325 阅读 · 14 评论 -
unix环境高级编程-4.17-sylmink和readlink函数
本节将介绍symlink和readlink函数的一些基本原理。symlink函数用来创建一个符号链接#includeint symlink(const char* a c t u a l p a t h,const char* sympath);查看GNU C文档int symlink (const char *oldname, const char *newname) [F原创 2011-10-24 22:41:35 · 3858 阅读 · 0 评论 -
UNIX网络编程初步
1.1 客户端程序和服务端程序 网络程序和普通的程序有一个最大的区别是网络程序是由两个部分组成的--客户端和服务器端. 网络程序是先有服务器程序启动,等待客户端的程序运行并建立连接.一般的来说是服务端的程序 在一个端口上监听,直到有一个客户端的程序发来了请求. 1.2 常用的命令 由于网络程序是有两个部分组成,所以在调试的时候比较麻烦,为此我们有必要知道一些常用的网络命令转载 2011-10-24 09:45:41 · 1667 阅读 · 0 评论 -
unix环境高级编程-4.8-utime函数
上一节,我们描述了对文件操作的三种时间,这一节主要讲述utime函数,既对一个文件的访问和修改时间。#include int utime(const char* pathname,const struct utimbuf *times);成功返回0,失败返回-1;此函数所使用的数据结构struct utimbuf{ time_t actime ;/*access原创 2011-10-25 21:54:14 · 3640 阅读 · 0 评论 -
unix环境高级编程-4.18-文件时间
在unix系统中,每个文件要保持三个时间字段,他们的意义分别如下:字段说明例子ls选项st_atimest_mtimest_time文件数据的最后访问时间文件按数据的最后修改时间i节点状体的最后更改时间readwritechmo,chown-u默认-c注意st_mti原创 2011-10-25 19:51:25 · 1187 阅读 · 0 评论 -
unix环境高级编程-mkdir和rmdir函数
4.20 mkdir和rmdir函数#include int mkdir(const char* path,mode_t mode);成功返回0,失败-1.此函数创建了一个新的空目录。其中.和..目录项制动创建的。所指定的文件访问的文件访问权限mode由进程的文件模式创建屏蔽字的修改。查看GNU Cint mkdir (const char *filename, mod原创 2011-10-26 21:27:33 · 5397 阅读 · 0 评论 -
unix环境高级编程-chdir、fchdir和getcwd函数。
每个进程都有一个当前的工作目录,此目录是搜索所有相对路径的起点。进程通过调用chdir或fcdir函数可以更改当前工作目录。进程通过调用chdir或者fchdir函数可以更改当前工作目录。 #includeint chdir(const char* pathname);int fchdir(int filedes); 这两个函数分别用文件名和文件描述符来制定新的工作目录原创 2011-10-27 22:39:47 · 4137 阅读 · 0 评论 -
unix环境高级编程-4.21-读目录
本节主要讲述了对unix系统对读目录的讲述。首先了解一下了解一下下面的函数#include DIR* opendir(const char* pathname); 成功返回指针,错误返回null;struct dirent *readdir(DIR *dp);//成功返回其指针,若在目录结尾或出错则返回null;void rewinddir(原创 2011-10-27 21:47:01 · 1362 阅读 · 0 评论 -
unix环境高级编程-undefined reference to 'pthread_create'问题解决
笔者一直在学习unix环境高级编程。第十一章为线程编程。第一个程序就是打印线程ID。程序如下:#include "apue.h"#include pthread_t ntid;void printids(const char* s){ pid_t pid; pthread_t tid; pid=getpid();//得到当前原创 2011-11-18 19:36:30 · 8237 阅读 · 2 评论 -
unix环境高级编程-5.2~3标准I/O库。
5.1引言I/O对于操作系统是一个非常重要的。无论是各种类型的数据库。5.2 流和FILE对象第三章,我们可以回忆到I/O函数都是文件描述符的。即是打开一个文件,返回一个文件描述符。然后对文件描述符进行后续的I/O操作。而对于标准的I/O库,操作则围绕流进行的!当用标准I/O库打开或创建一个文件的时候,我们已经是用一个流与一个文件相关联。标准io文件流可用于单字节和多字节字符集。流原创 2011-10-31 22:56:16 · 1476 阅读 · 0 评论 -
深入浅出---unix多进程编程之wait()和waitpid()函数
Wait和waipid函数 当一个进程正常或异常终止的时候,内核就像其父进程发送SIGCHLD信号,因为子进程是个一步事件,所以这种信号也是内核系那个父进程发的异步通知。父进程可以选择忽略该信号,或者提供一个该信号发生时即被调用执行的函数。对于这种信号的系统默认动作是忽略它。现在要知道调用wait或waitpid的进程可能会发生什么情况: 如果其所有子进程都在运行,则阻塞原创 2011-11-21 23:43:57 · 37918 阅读 · 15 评论 -
fork两次如何避免僵尸进程
曾经觉得费解,温故知新一下:/*g++ -o New0001 New0001.cpp */#include #include #include #include int main(void){ pid_t pid; if ((pid = fork()) { fprintf(stderr,"Fork error!/n");转载 2011-11-22 20:53:23 · 1493 阅读 · 0 评论 -
深入浅出--UNIX多进程编程之fork()函数
0前言上周都在看都在学习unix环境高级编程的第八章——进程控制。也就是这一章中,让我理解了unix中一些进程的原理。下面我就主要按照进程中最重要的三个函数来进行讲解。让大家通过阅读这一篇文章彻底明白进程这点事。希望对大家有所帮助。1进程环境 在学习进程之前,一定要了解一下unix的进程环境。系统如何对进程终止,和一个程序启动终止,程序运行的原理等,这些都有原创 2011-11-21 11:58:36 · 18250 阅读 · 14 评论 -
unix环境高级编程-5.4-缓冲
提到缓冲这个概念,大家都知道非常熟悉不过了,我们在写程序的时候,比如java,C++都会涉及到一些缓冲的概念,那么到底缓冲有什么好的作用的。 其实缓冲在unix的操作系统里,就是为了减少read和write的调用次数。在第三章中,对不同缓冲区的长度设置,执行IO所要的cpu时间量是不一样的。他也对每个io流自动的进行缓冲管理,从而避免了应用程序需要考虑这一点所带来的麻烦。不幸的是,标准I/原创 2011-11-01 00:13:49 · 2205 阅读 · 0 评论 -
unix环境高级编程-5.7-每行一次I/O
下面两个函数提供每次输入一行的功能 #includechar *fgets(char * restrict buf,int n,FILE* restrict fp);char* gets(char* buf); 两个返回值:若成功返回buf,若已达到文件结尾或出错则返回NULL;char * fgets (char *s, int count, FILE *stream原创 2011-11-06 19:00:13 · 918 阅读 · 0 评论 -
unix环境高级编程-5.8-标准I/O的效率。
使用上一节所述的函数。我们能对标准的I/O的效率有所了解。请看下面的程序#include "apue.h"int main(void){ int c; while((c=getc(stdin))!=EOF) { if(putc(c,stdout)==EOF) err_sys("output error"); if(ferror(stdin)) err_sys原创 2011-11-06 21:57:29 · 1161 阅读 · 0 评论 -
unix环境高级编程-5.6-读和写流
一旦打开了一个流,则可在三种不同的类型的非格式化I/O,中进行选择,对其进行读、写操作:(1)每次一个字符的I/O.一次读或写一个字符。则标准的io函数处理所有缓冲。(2)每次一行的IO,如果想要一次读或写遗憾,则使用fgets和fputs函数。每行都以一个换行符终止。当调用fgets,要说明最大处理行长。(3)直接IO,fread和fwrite函数支持这种类型的IO,每次io操作读或原创 2011-11-06 16:23:51 · 1032 阅读 · 0 评论 -
unix环境高级编程-5.9-二进制I/O
上一节,我们知道对于读或者写都是一个一个字节,或者一行行的。getc和putc是通过字节来处理。fputs和fgets是一行的,但是遇到null就停止了。下面介绍fread和fwrite函数原型:#includesize_t fread(void* restrict ptr,size_t size,size_t nobj,FILE* restrict fp);size_t原创 2011-11-08 22:43:11 · 1109 阅读 · 0 评论