/*
* 该文件中的两个函数read_pipe和write_pipe是上层函数
* read和write的底层实现
*/
/*
* linux/fs/pipe.c
*
* (C) 1991 Linus Torvalds
*/
#include <signal.h>
#include <linux/sched.h>
// 内存管理头文件。含有页面大小定义和一些页面释放函数原型
#include <linux/mm.h> /* for get_free_page */
#include <asm/segment.h>
/* pipe类似于队列,向pipe的尾部写入数据,从pipe的头部读取数据 */
/* 管道读操作函数 */
/* 参数inode 是管道对应的i 节点,buf 是数据缓冲区指针,count 是读取的字节数 */
/*
* read_pipe()函数用于读取管道中的数据,如果管道中没有数据的话,
* 唤醒写管道进程,自己睡眠,如果读到数据,并把数据传到用户缓冲区,
* 当把管道中所有的数据都取走后,也要唤醒等待写管道的进程,并返回
* 已读数据字节数
*/
int read_pipe(struct m_inode * inode, char * buf, int count)
{
int chars, size, read = 0;
while (count>0)
{
......
/*
* linux/fs/file_dev.c
*
* (C) 1991 Linus Torvalds
*/
#include <errno.h>
#include <fcntl.h>
#include <linux/sched.h>
#include <linux/kernel.h>
#include <asm/segment.h>
#define MIN(a,b) (((a)<(b))?(a):(b))
#define MAX(a,b) (((a)>(b))?(a):(b))
/* 根据i 节点和文件结构,读设备数据,为上层的read函数提供函数 */
int file_read(struct m_inode * inode, struct file * filp, char * buf, int count)
{
// 由i 节点可以知道设备号,由filp 结构可以知道文件中当前读写指针位置。buf 指定用户态中
// 缓冲区的位置,count 为需要读取的字节数。返回值是实际读取的字节数,或出错号(小于0)
int left,chars,nr;
struct buffer_head * bh;
// 若需要读取的字节计数值小于等于零,则返回
if ((left=count)<=0)
return 0;
while (left)
{
// 根据i 节点和文件表结构信息,取数据块文件当前读写位置在设备上对应的逻辑块号nr。若nr 不
// 为0,则从i 节点指定的设备上读取该逻辑块
if (nr = bmap(inode,(filp->f_pos) ......
转载:http://www.cnblogs.com/hexapodsoft/archive/2007/04/24/724902.html
I/O重定向详解及应用实例
1、 基本概念(这是理解后面的知识的前提,请务必理解)
a、 I/O重定向通常与 FD有关,shell的FD通常为10个,即 0~9;
b、 常用FD有3个,为0(stdin,标准输入)、1(stdout,标准输出)、2(stderr,标准错误输出),默认与keyboard、monitor、monitor有关;
c、 用 < 来改变读进的数据信道(stdin),使之从指定的档案读进;
d、 用 > 来改变送出的数据信道(stdout, stderr),使之输出到指定的档案;
e、 0 是 < 的默认值,因此 < 与 0<是一样的;同理,> 与 1> 是一样的;
f、 在IO重定向 中,stdout 与 stderr 的管道会先准备好,才会从 stdin 读进资料;
g、 管道“|”(pipe line):上一个命令的 stdout 接到下一个命令的 stdin;
h、 tee 命令是在不影响原本 I/O 的情况下,将 stdout 复制一份到档案去;
i、 bash(ksh)执行命令的过程:分析命令-变量求值-命令替代(``和$( ))-重定向-通配符展开-确定路径-执行命令;
j、
( ) 将 command group 置于 sub-shell 去执行,也称 nested
sub-shell,它有一 ......
1,网络整体流量查看
ifconfig -s
cat /proc/net/dev
sar -n DEV/EDEV interval(时间隔) count(次数)
nload -m [-d interface]
2,详细查看网络流量,比如查看某一个ip/port,某一个协议
iptraf,文本窗口界面
ntop,web网页界面 ......
在linux上,jprofiler可以分析java的软件系统,oprofile可以分析C的软件系统。
oprofile可以说是一个工具集,包含:
ophelp,
opcontrol,
agent libraries,
opreport,
opannotate,
opgprof,
oparchive,
opimport。
常用的工具是opcontrol,opreport,opannotate。opcontrol用来启动来停止profile监控;opreport用来报告测试结果;opannotate用来分析源代码。
详细信息手册:
http://oprofile.sourceforge.net/doc/index.html
......
脚本功能: 定期对一些项目进行完整备份.
project.lst 文件格式如下:
project1
project2
备份脚本如下:
#!/bin/sh
#
# subversion data backup script
# by scud http://www.jscud.com
# 2005-11-27
#
# subversion完整备份的脚本,调整好后使用crontab -e 放到自动执行里面即可.
#
#备份日志文件
LogFile=/backup/svn/svnbak.log
DATE=`date +%Y%m%d`
#备份目录
BakDir=/backup/svn/data
#日常备份目录,如果有
DailyDir=/backup/svn/daily
#要备份的项目列表文件,只有项目名
ProjectLst=/backup/svn/project.lst
#所有项目都保存在这个目录下
SvnDir=/var/svn
#svnadmin程序的路径
SVNADMIN=/app/subversion/bin/svnadmin
echo " " >> $LogFile
echo " " >> $LogFile
echo "-------------------------------------------" >> $LogFile
echo $(date +"%y-%m-%d %H:%M:%S") >> $LogFile
echo "--------------------------" >> $LogFile
cd $BakDir
#读取项目列表
PROJECTLIST=`cat $ProjectLst`
for project in $PROJECTLIST
do
projectdata=$SvnDir/$project
destdir=$BakDir/$project
dumpfile=$DATE.$pr ......