Linux/UNIX编程
文章平均质量分 86
walkerkalr
学无止境,梦想不止
展开
-
shell程序设计(2)
shell程序设计(2)Shell的语法变量在shell里,使用变量之前通常并不需要实现为他们做出声明。默认情况下,所以变量都被看做字符串来存储,即使它们被赋值为数值也是如此。shell和一些工具程序会在需要时把数值型字符串转换为对应的数值以对它们进行操作。Linux大小写敏感。在shell中,我们可以通过在变量名前加一个$符号来访问它的内容。无论何时想获取变量的内容,我们都需要在原创 2014-04-17 19:00:02 · 1319 阅读 · 0 评论 -
Linux/UNIX之进程控制(2)
进程控制(2)竞争条件当多个进程都企图对共享数据进行某种处理,而最后的结果又取决于进程运行的顺序,则我们认为这发生了竞争条件。如果一个父进程希望等待一个子进程终止,则它必须调用一种wait函数。如果一个进程要等待其父进程终止,可使用下列形式循环while(getppid()!= 1) sleep(1);这种形式的循环(成为轮询)的问题是它浪费了CPU时间。原创 2014-04-23 16:14:01 · 1000 阅读 · 0 评论 -
Linux/UNIX之进程环境
进程环境进程终止有8种方式使进程终止,其中5中为正常终止,它们是1) 从main返回2) 调用exit3) 调用_exit或_Exit4) 最后一个线程从其启动例程返回5) 最后一个线程调用pthread_exit异常终止有3中方式6) 调用abort7) 接到一个信号并终止8)原创 2014-04-22 16:40:55 · 957 阅读 · 0 评论 -
Linux/UNIX高级I/O
高级I/O非阻塞IO非阻塞I/O使我们可以调用open、read和write这样的I/O操作,并使这些操作不会永久阻塞。如果这种操作不能完成,则调用立即出错返回,表示该操作如继续执行将阻塞。对于一个给定的描述符有两种方法对其指定非阻塞I/O:1) 如果调用open获得描述符,则可指定O_NONBLOCK标志2) 对于已打开的一个描述符,则可调用fcntl,由原创 2014-05-08 16:45:21 · 1066 阅读 · 0 评论 -
Linux/UNIX进程关系
进程关系进程组每个进程除了有一个进程ID之外,还属于一个进程组。进程组是一个或多个进程的集合。通常他们与同一作业相关联,可接受来自同一终端的各种信号。#includepid_tgetpgrp(void); /* POSIX.1version */pid_t getpgid(pid_tpid);intsetpgid(pid_t pid, pid原创 2014-04-24 11:37:01 · 1291 阅读 · 0 评论 -
Linux/UNIX进程间的通信(1)
进程间的通信(1)进程间的通信IPC(InterProcessCommunication )主要有以下不同形式:半双工管道和FIFO;全双工管道和命名全双工管道;消息队列,信号量和共享存储;套接字和STREAMS管道pipe函数当从一个进程连接到另一个进程时,我们使用术语管道。我们通常是把一个进程的输出通过管道连接到另一个进程的输入。管道是由调用pipe函数创建的:#i原创 2014-05-09 18:18:02 · 816 阅读 · 0 评论 -
Linux/UNIX之信号(2)
信号(2)sigaction函数sigaction函数的功能是检查或修改与制定信号相关联的处理动作。此函数取代了signal函数。#include int sigaction(int signum, const structsigaction *act, struct sigaction *oldact);此函数使用下列结构:struct sigaction {原创 2014-04-25 16:14:28 · 883 阅读 · 0 评论 -
Linux/UNIX之信号(1)
信号(1)信号是软件中断。每个信号都有一个名字,这些名字都以SIG开头(如SIGABRT 夭折信号)。在头文件中,这些信号都被定义成正整数。不存在编号为0的信号,kill函数对信号编号为0有特殊的应用。当某个信号出现时,可以要求内核按照下列三种方式之一进行处理:1. 忽略此信号2. 捕捉信号3. 执行系统默认动作signal函数UNIX原创 2014-04-25 11:41:25 · 1139 阅读 · 0 评论 -
Linux/UNIX线程(2)
线程(2)线程同步当多个控制线程共享相同内存时,需要确保每个线程看到一致的数据视图。如果每个线程使用的变量都是其他线程不会读取或修改的,那么就不在一致性问题。当两个或多个线程试图在同一时间修改同一变量时,也需要进行同步。考虑变量递增操作的情况:增量操作通常分三步:1. 从内存单元读入寄存器2. 在寄存器中进行变量值的增加3. 把新的值写回内存单原创 2014-04-26 19:34:13 · 771 阅读 · 0 评论 -
Linux/UNIX线程(1)
线程(1)本文将介绍如何使用多个控制线程在单个进程环境中执行多个任务。一个进程中的所有线程都可以访问该进程的组成部件(如文件描述符和内存)。线程包含了表示进程内执行环境必须的信息,其中包括进程中标识线程的线程ID、一组寄存器值、栈、调度优先级和策略、信号屏蔽字、errno变量以及线程私有数据。进程的所有信息对该进程的所有线程都是共享的,包括可执行的程序文本、程序的全局内存和堆内存、栈以原创 2014-04-26 14:25:24 · 926 阅读 · 0 评论 -
Linux/UNIX之进程间的通信(2)
进程间的通信(2)有三种IPC我们称为XSI IPC,即消息队列、信号量以及共享存储器,它们之间有很多相似之处。标识符和键每个内核的IPC结构(消息队列、信号量或共享存储段)都用一个非负整数的标识符加以引用。例如,为了对一个消息队列发送或取消息,只需要知道其队列标识符。与文件描述符不同,IPC标识符不是小的整数。当一个IPC结构被创建,以后被删除时,与这种结果相关的标识符连续加1,知道原创 2014-05-13 10:56:07 · 747 阅读 · 0 评论 -
Linux/UNIX进程控制(1)
进程控制进程标识符每个进程都有肺腑的整形表示唯一的进程ID。按一个进程终止后,其进程ID就可以再次使用了。如下是几个典型进程的ID及其类型和功能。ID 进程名 中文名 类型 作用0 swapper 交换进程 系统进程 它是内核一部分,不执行原创 2014-04-23 14:34:30 · 1597 阅读 · 0 评论 -
Linux/UNIX系统数据文件和信息
系统数据文件和信息口令文件存储在/etc/passwd中,可用以下函数获取口令文件项。#include #include struct passwd *getpwnam(const char *name);struct passwd *getpwuid(uid_t uid);如果要查看的只是登录名或用户ID,上述两个函数能满足要求,但有些程序要查看整个口令文件。下面三个原创 2014-04-22 14:36:56 · 862 阅读 · 0 评论 -
shell程序设计(3)
shell程序设计(3)shell语法函数要定义一个shell函数,我们只需要简单地写出它的名字,然后是一对空括号,再把有关的语句放在一对花括号中,如下所示:function_name(){ statements} 实验:简单的函数#!/bin/bashfoo(){ echo“Function foo is executi原创 2014-04-17 20:22:34 · 929 阅读 · 0 评论 -
UNIX/linux入门
UNIX/linux入门UNIX哲学:简单性、集中性、可重用组件、过滤器、开放的文件格式和灵活性。Linux程序设计linux程序linux一个用程序表现为两种特殊的文件:可执行文件和脚本文件。可执行文件是计算机可以直接运行的程序。脚本文件是一组指令的集合,这些指令将由另一个程序(即解释器)来执行。搜索路径由系统管理员配置,通常包含一些存储系统程序的标准路径,其中包括:原创 2014-04-17 11:46:30 · 985 阅读 · 0 评论 -
shell程序设计(1)
shell程序设计(1)管道和重定向重定向重定向输出chen123@ubuntu:~/C++$ ls -l >lsoutput.txt这条命令把ls命令的输出保存到文件lsoutput.txt中。文件描述符0代表一个程序的标准输入,文件描述符1代表标准输出,文件描述符2代表标准错误输出。在上面的例子中,通过>操作符把标准输出重定向到一个文件。默认情况下,如果该文件已经存在,原创 2014-04-17 15:34:14 · 1150 阅读 · 0 评论 -
Linux/UNIX之文件和目录(1)
文件和目录(1)stat、fstat和lstat函数#include #include #include int stat(const char *path, struct stat*buf);int fstat(int fd, struct stat *buf);int lstat(const char *path, struct stat*buf);一旦给出pa原创 2014-04-19 18:09:28 · 838 阅读 · 0 评论 -
文件I/O(2)
文件I/O(2)文件共享内核使用三种数据结构表示打开的文件,他们之间的关系决定了在文件共享方面一个进程对另一个进程可能产生的影响。如图1所示。1) 每个进程在进程表中都有一个记录项,记录项中包含一张打开文件描述表,可将其视为一个矢量,每个描述符占用一项。与每个文件描述符相关联的是:a) 文件描述符标志b) 指向一个文件表项的指针2) 内核为所有打开文原创 2014-04-18 15:55:42 · 952 阅读 · 0 评论 -
Linux/UNIX之文件和目录(2)
文件和目录(2)link、ulink、remove和rename函数#include int link(const char *oldpath, const char*newpath);int unlink(const char *pathname); #include int remove(const char *pathname);int rename(cons原创 2014-04-19 18:12:55 · 917 阅读 · 0 评论 -
文件I/O(1)
文件I/O(1)文件描述符对内核而言,所以打开的文件都通过文件描述符引用。每个进程都有一些与之关联的文件描述符。文件描述符是一个非负整数。当打开一个现有文件或创建一个新文件时,内核向进程返回一个文件描述符。当读或写一个文件时,使用open或creat返回的文件描述符标识该文件,将其作为参数传送给read和write。一般有三个以及打开的文件描述符,他们是:0:标准输入原创 2014-04-18 11:28:26 · 771 阅读 · 0 评论 -
Linux/UNIX线程控制
线程控制 线程属性调用pthread_create函数的例子中,传入的参数都是空指针,而不是指向pthread_attr_t结果的指针。可以用pthread_attr_t结构修改线程默认属性,并把这些属性与创建的线程联系起来。可以使用pthread_attr_init函数初始化pthreaad_attr_t结构。调用pthread_attr_init以后,pthread_attr_t结构所原创 2014-05-07 16:49:44 · 906 阅读 · 0 评论 -
Linux 守护进程的编程方法
Linux 守护进程的编程方法 守护进程(Daemon)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。守护进程是一种很有用的进程。Linux的大多数服务器就是用守护进程实现的。比如,Internet服务器inetd,Web服务器httpd等。同时,守护进程完成许多系统任务。比如,作业规划进程crond,打印进程lpd等。 守护进程的编程本身并转载 2014-05-08 09:10:34 · 511 阅读 · 0 评论 -
Linux/UNIX之标准IO库
标准IO库当打开一个流时,标准I/O函数fopen返回一个指向FILE对象的指针。该对象通常是一个结构,它包含了标准I/O库为管理该流所需的所有信息,包括:用于实际I/O的文件描述符、指向用于该缓冲区的指针、缓冲区的长度、当前在缓冲区的字符数以及出错标志等。为引用一个流,需将FILE指针作为参数传递给每个标准I/O函数。对于标准输入、标准输出和标准出错,他们的文件描述符对应STFIN_FI原创 2014-04-22 11:55:21 · 1161 阅读 · 0 评论 -
Linux/UNIX套接字连接
套接字连接套接字是一种通信机子,凭借这种机制,客户/服务器系统的开发工作既可以在本地单机上进行,也可以夸网络进行。套接字的创建和使用与管道是有区别的,因为套接字明确地将客户和服务器区分开来。套接字连接:首先,服务器应用程序用系统调用socket来创建一个套接字,它是系统分配给该服务器进程的类似文件描述符的资源,它不能与其他进程共享。接下来,服务器进程会给套接字起个名字。本地套接字的原创 2014-05-13 15:38:01 · 2070 阅读 · 0 评论