第 7 章进程控制开发

本章目标
文件是 Linux 中最常见最基础的操作对象,而进程则是系统调度的单位,在上一章学习了文件I/O 控制之后,本章主要讲解进程控制开发部分,通过本章的学习,读者将会掌握以下内容。
  • 掌握进程相关的基本概念
  • 掌握 Linux 下的进程结构
  • 掌握 Linux 下进程创建及进程管理
  • 掌握 Linux下进程创建相关的系统调用
  • 掌握守护进程的概念
  • 掌握守护进程的启动方法
  • 掌握守护进程的输出及建立方法
  • 学会编写多进程程序
  • 学会编写守护进程
7.1 Linux 下进程概述
7.1.1 进程相关基本概念
1.进程的定义 Continue reading

6.5.2 文件读写

1.读文件
(1)fread函数说明
在文件流打开之后,可对文件流进行读写等操作,其中读操作的函数为fread。
(2)fread函数格式
fread函数格式如表6.18所示。
表6.18 fread函数语法要点
所需头文件 #include <stdio.h>
函数原型 size_t fread(void * ptr,size_t size,size_t nmemb,FILE * stream)
ptr:存放读入记录的缓冲区
size:读取的记录大小
nmemb:读取的记录数
函数传入值
stream:要读取的文件流
函数返回值
成功:返回实际读取到的nmemb数目
失败:EOF
2.写文件
(1)fwrite函数说明
fwrite函数是用于对指定的文件流进行写操作。
(2)fwrite函数格式
fwrite函数格式如表6.19 所示。
表6.19 fwrite函数语法要点
所需头文件#include <stdio.h>
函数原型 size_t fwrite(const void * ptr,size_t size,size_t nmemb,FILE * stream)
函数传入值ptr:存放写入记录的缓冲区
size:写入的记录大小
nmemb:写入的记录数
stream:要写入的文件流
函数返回值
成功:返回实际写入到的nmemb数目
失败:EOF
这里仅以fwrite为例简单说明:
#include <stdio.h>
int main()
{
FILE *fp;
char s[3] = {‘a’,’b’,’c’};
int i,nmemb = sizeof(s);
printf(“%dn”, nmemb);
fp = fopen(“what”, “w”);
i = fwrite(s, sizeof(char), nmemb, fp);
printf(“i=%dn”, i);
fclose(fp);
}
运行结果如下所示:
[root@localhost file]# ./write
i=3
[root@localhost file]# cat what
abc

6.5 标准 I/O 开发

本章前面几节所述的文件及I/O 读写都是基于文件描述符的。这些都是基本的I/O 控制,是不带缓存的。而本节所要讨论的I/O 操作都是基于流缓冲的,它是符合ANSI C的标准I/O处理,这里有很多函数读者已经非常熟悉了(如printf、scantf 函数等),因此本节中仅简要介绍最主要的函数。

标准 I/O 提供流缓冲的目的是尽可能减少使用read和write调用的数量。标准I/O 提供了3 种类型的缓冲存储。

· 全缓冲。在这种情况下,当填满标准I/O 缓存后才进行实际I/O 操作。对于驻在磁盘上的文件通常是由标准I/O 库实施全缓冲的。在一个流上执行第一次I/O 操作时,通常调用malloc就是使用全缓冲。

· 行缓冲。在这种情况下,当在输入和输出中遇到新行符时,标准I/O 库执行I/O 操作。
这允许我们一次输出一个字符(如fputc 函数),但只有写了一行之后才进行实际I/O 操作。
当流涉及一个终端时(例如标准输入和标准输出),典型地使用行缓冲。 Continue reading

6.3.3 fcntl函数说明

(1)fcntl函数说明
前面的这5个基本函数实现了文件的打开、读写等基本操作,这一节将讨论的是,在文 件已经共享的情况下如何操作,也就是当多个用户共同使用、操作一个文件的情况,这时,Linux 通常采用的方法是给文件上锁,来避免共享的资源产生竞争的状态。
文件锁包括建议性锁强制性锁
建议性锁要求每个上锁文件的进程都要检查是否有锁存,并且尊重已有的锁。在一般情况下,内核和系统都不使用建议性锁。强制性锁是由内 核执行的锁,当一个文件被上锁进行写入操作的时候,内核将阻止其他任何文件对其进行读写操作。采用强制性锁对性能的影响很大,每次读写操作都必须检查是否有锁存在。
在 Linux 中,实现文件上锁的函数有lock和fcntl,其中flock用于对文件施加建议性锁,而fcntl不仅可以施加建议性锁,还可以施加强制锁。同时,fcntl还能对文件的某一记录进行上锁,也就是记录锁。
记录锁又可分为读取锁写入锁,其中读取锁又称为共享锁,它能够使多个进程都能在文件的同一部分建立读取锁。而写入锁又称为排斥锁,在任何时刻只能有一个进程在文件的某个部分上建立写入锁。当然,在文件的同一部分不能同时建立读取锁和写入锁。
注意:
fcntl是一个非常通用的函数,它还可以改变文件进程各方面的属性,在本节中,主要介绍它建立记录锁的方法,关于它其他用户感兴趣的读者可以参看fcntl手册。 Continue reading

6.2 Linux 中文件及文件描述符概述

正如第1 章中所述,在Linux 中对目录和设备的操作都等同于文件的操作,因此,大大简化了系统对不同设备的处理,提高了效率。Linux 中的文件主要分为4 种:普通文件、目录文件、链接文件和设备文件。
那么,内核如何区分和引用特定的文件呢?这里用到的就是一个重要的概念——文件描述符。对于Linux 而言,所有对设备和文件的操作都使用文件描述符来进行的。文件描述符是一个非负的整数,它是一个索引值,并指向内核中每个进程打开文件的记录表。当打开一个现存文件或创建一个新文件时,内核就向进程返回一个文件描述符;当需要读写文件时,也需要把文件描述符作为参数传递给相应的函数。
通常,一个进程启动时,都会打开3 个文件:标准输入、标准输出和标准出错处理。这3 个文件分别对应文件描述符为0、1 和2(也就是宏替换STDIN_FILENO、STDOUT_FILENO和STDERR_FILENO,鼓励读者使用这些宏替换)。
基于文件描述符的I/O 操作虽然不能移植到类Linux 以外的系统上去(如Windows),但它往往是实现某些I/O操作的惟一途径,如Linux中低级文件操作函数、多路I/O、TCP/IP套接字编程接口等。同时,它们也很好地兼容POSIX标准,因此,可以很方便地移植到任何POSIX平台上。基于文件描述符的I/O操作是Linux中最常用的操作之一,希望读者能够很好地掌握。

用PHP命令行控制脚本[CLI]

CLI    :Command-Line Script(CLI – Command-Line Interface) //翻译;命令行接口

字串5

PHP CLI(Command Line Interface). http://www.php.net/ 预设支援CLI 了,什么是CLI,也就是Command Line Interface,简单的说,就是让你可以在系统上当shell 来跑。 如果还不懂,简单的说,就像你写perl 程式一样:
#!/usr/local/bin/php
echo “Hello World!”;
?>

字串3
———————————————————官方[PHP 手册]叙述:

从版本 4.3.0 开始,PHP 提供了一种新类型的 SAPI(Server Application Programming Interface,服务端应用编程端口)支持,名为 CLI,意为 Command Line Interface,即命令行接口。顾名思义,该 SAPI 模块主要用作 PHP 的开发外壳应用。CLI SAPI 和其它 SAPI 模块相比有很多的不同之处,我们将在本章中详细阐述。值得一提的是,CLI 和 CGI 是不同的 SAPI,尽管它们之间有很多共同的行为。 Continue reading

asp实现QQ号状态和QQ秀

原理基于Xmlhttp查询http://webpresence.qq.com/getonline?qq=QQ

如果在线将返回1为在线,0为不在线。 好了,

或者:

1) 定义online数组,必须是online命名

<script>var online= new Array();</script>

2) 获取在线状态

<script src=”http://webpresence.qq.com/getonline?Type=1&271569542:”></script>

可以获取多个,必须以冒号分隔,以冒号结尾,比如:

<script src=”http://webpresence.qq.com/getonline?Type=1&271569542:78293657:123456:”></script>

online[0]=0,表示271569542离线

online[1]=1,表示78293657在线

online[2]=1,表示123456在线

填写号码的先后顺序,分别对应数组online的0、1、2

QQ秀怎么返回那

这个地址http://qqshow-user.tencent.com/

是显示QQ秀的 Continue reading

nginx和apache下对域名进行301重定向-优化篇

一般网站为了将网站的权重从yoursite.com自动转向到www.yoursite.com,这里我们在nginx下来实现永久跳转.

将不带WWW的主域名重定向到带WWW的二级域名,实现两个域名合并,方法如下:

Nginx配置方法:

方法1:

server {

server_name www.yoursite.com yoursite.com;

if ($host != ‘www.yoursite.com’ ) {

rewrite  ^/(.*)$  http://www.yoursite.com/$1  permanent;

}

}

Continue reading

3.7 使用 autotools

在上一小节,读者已经了解到了make 项目管理器的强大功能。的确,Makefile 可以帮助make 完成它的使命,但要承认的是,编写Makefile 确实不是一件轻松的事,尤其对于一个较大的项目而言更是如此。那么,有没有一种轻松的手段生成Makefile而同时又能让用户享受make 的优越性呢?本节要讲的autotools 系列工具正是为此而设的,它只需用户输入简单的目标文件、依赖文件、文件目录等就可以轻松地生成Makefile了,这无疑是广大用户的所希望的。另外,这些工具还可以完成系统配置信息的收集,从而可以方便地处理各种移植性的问题。也正是基于此,现在Linux 上的软件开发一般都用autotools 来制作Makefile,读者在后面的讲述中就会了解到。

3.7.1 autotools使用流程

正如前面所言,autotools 是系列工具,读者首先要确认系统是否装了以下工具(可以用which命令进行查看)。

  • · aclocal
  • · autoscan
  • · autoconf
  • · autoheader
  • · automake

使用autotools主要就是利用各个工具的脚本文件以生成最后的Makefile。其总体流程是这样的。 Continue reading

linux下which、whereis、locate、find 命令的区别

我们经常在linux要查找某个文件,但不知道放在哪里了,可以使用下面的一些命令来搜索。这些是从网上找到的资料,因为有时很长时间不会用到,当要用的时候经常弄混了,所以放到这里方便使用。
which       查看可执行文件的位置
whereis    查看文件的位置
locate       配 合数据库查看文件位置
find          实际搜寻硬盘查询文件名称

1、which
语法:
[root@redhat ~]# which 可执行文件名称
例如:
[root@redhat ~]# which passwd
/usr/bin/passwd
which是通过 PATH环境变量到该路径内查找可执行文件,所以基本的功能是寻找可执行文件 Continue reading