<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>burt</title>
    <description></description>
    <link>http://burt.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>文件上传</title>
        <author>burt</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://burt.javaeye.com">burt</a>&nbsp;
          链接：<a href="http://burt.javaeye.com/blog/76750" style="color:red;">http://burt.javaeye.com/blog/76750</a>&nbsp;
          发表时间: 2007年05月03日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          原创作品，作者：飞阳。转载请注明出处，谢谢。<br />http://hi.baidu.com/burtcn<br /><br />我使用的jspsmart的上传组件，在myeclipse下居然无法使用jar包，所以只能把编译过的class文件导入到WEB-INF/classes文件夹下。而在myeclipse中，默认是不会显示这个目录的，可以打开navigator视图，windows =>show view=>other=>general=>navigator。可能是myeclipse的问题吧，我发现其实直接适用jar包还是可以的。如果实在不行就新建一个web项目，重新开始加入jar包。这样一般都没有问题的，这样就可以省去从jar包里面提取class文件的麻烦了。<br /><br />upload.htm<br /><pre name="code" class="java">&lt;form action="upload.jsp" method="post" enctype="multipart/form-data">
&lt;table width="400" border="0" align="center" cellpadding="12" cellspacing="1" bgcolor="#000000" class="uploadfrm">
  &lt;tr bgcolor="#009933">
    &lt;td colspan="2">文件上传&lt;/td>
  &lt;/tr>
  &lt;tr bgcolor="#FFFFFF">
    &lt;td width="76">文件1&lt;/td>
    &lt;td width="273">&lt;input name="file1" type="file" id="file1">&lt;/td>
  &lt;/tr>
  &lt;tr bgcolor="#FFFFFF">
    &lt;td>文件2&lt;/td>
    &lt;td>&lt;input name="file2" type="file" id="file2">&lt;/td>
  &lt;/tr>
  &lt;tr align="center" bgcolor="#FFFFFF">
    &lt;td colspan="2">&lt;input type="submit" name="Submit" value="提交">
        &lt;input name="reset" type="reset" id="reset" value="重置"> &lt;/td>
  &lt;/tr>
&lt;/table>
&lt;/form></pre><br /><br />upload.jsp<br /><pre name="code" class="java">
&lt;%@ page language="java" import="com.jspsmart.upload.*" pageEncoding="gb2312"%>
&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
&lt;html>
  &lt;head>
    &lt;title>上传文件&lt;/title>    
	&lt;meta http-equiv="pragma" content="no-cache">
	&lt;meta http-equiv="cache-control" content="no-cache">
	&lt;meta http-equiv="expires" content="0"> 
  &lt;/head>  
  &lt;body>
&lt;jsp:useBean id="myupload" scope="page" class="com.jspsmart.upload.SmartUpload" />
    &lt;%    
    int count=0;    
    //有哪些jsp内置对象可以直接引用
   	myupload.initialize(pageContext);
   	myupload.upload();   	
   	for(int i=0;i&lt;myupload.getFiles().getCount();i++){   	
   		File file=myupload.getFiles().getFile(i);   		
   		if(!file.isMissing()){   			
   			out.println("&lt;p>");
   			file.saveAs("//Upload//"+file.getFileName(),myupload.SAVE_VIRTUAL);   			
   			out.println("文件"+file.getFileName()+"上传成功&lt;br>");
   			out.println("saved path="+getServletContext().getRealPath("//Upload//"+file.getFileName())+"&lt;br>");
   			out.println("size="+file.getSize()+"&lt;br>");
   			out.println("filename="+file.getFileName()+"&lt;br>");
   			out.println("fileext="+file.getFileExt()+"&lt;br>");
   			out.println("contenttype="+file.getContentType()+"&lt;br>");
   			out.println("typemime="+file.getTypeMIME()+"&lt;br>");
   			out.println("&lt;/p>");
   			count++;  		
   		}
   	}   	
   	out.println("一共上传"+myupload.getFiles().getCount()+"个文件&lt;br>");
   	out.println("成功保存"+count+"个文件&lt;br>");   	
    %>
  &lt;/body>
&lt;/html>
</pre>
          <br/>
          <span style="color:red;">
            <a href="http://burt.javaeye.com/blog/76750#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 03 May 2007 03:05:21 +0800</pubDate>
        <link>http://burt.javaeye.com/blog/76750</link>
        <guid>http://burt.javaeye.com/blog/76750</guid>
      </item>
      <item>
        <title>时间片调度</title>
        <author>burt</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://burt.javaeye.com">burt</a>&nbsp;
          链接：<a href="http://burt.javaeye.com/blog/71707" style="color:red;">http://burt.javaeye.com/blog/71707</a>&nbsp;
          发表时间: 2007年04月17日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          原创作品，作者：飞阳<br />转载请注明出处http://hi.baidu.com/burtcn<br /><br />今天很郁闷，本来快要完工得时候，发现中毒了。<br />这病毒特别厉害，把我的还原镜像也给删除了。<br />只好浪费了许多时间来重装和安装软件，所以今天晚上基本上没做什么。<br /><br />下面的代码没有怎么测试。<br /><br /><pre name="code" class="java">#include &lt;stdio.h>
#include &lt;stdlib.h>
#define alloc(type) (type*)malloc(sizeof(type))
//进程结构体
struct process{     
      char name[10];
      int starttime;
      int runtime;
      int count;
      process *next;
} *waitlist,*runlist;
//函数声明
void init();
void insert();
void del(process *pro);
int getCount(int starttime);
void move(int num);
void run();
//定义时间片长度
int slicetime=3; 
//函数定义
//创建
void init(){     
      //初始化waitlist
      waitlist=alloc(process);
      waitlist->next=NULL;
      int num=0;
      printf("输入进程的数目:");
      scanf("%d",&num);
      while(num&lt;=0){
           printf("输入进程的数目:");
           scanf("%d",&num);
      }
      printf("请输入%d个进程信息\n",num);
      printf("格式:进程名 开始时间 运行时间\n");
      for(int i=0;i&lt;num;i++){          
           printf("%d:",i+1);
           insert();
      }
      printf("\n");
      //初始化runlist,循环链表
      runlist=alloc(process);
      runlist->next=runlist;     
}
//输入节点
void insert(){     
      process *pro=alloc(process);
      scanf("%s %d %d",pro->name,&(pro->starttime),&(pro->runtime));     
      pro->count=0;
      process *p=waitlist,*q;
      q=p->next;
      while(q!=NULL&&q->starttime&lt;=pro->starttime){
           p=q;
           q=p->next;
      }
      p->next=pro;
      pro->next=q;
}
//删除进程节点
void del(process *pro){     
      process *p,*q;
      p=pro;
      q=p->next;
      p->next=q->next;
      q->next=NULL;
      free(q);
}
//获得节点数目
int getCount(int starttime){
      process *p;     
      p=waitlist;
      int i=0;     
      while(p->next!=NULL&&p->starttime&lt;=starttime){          
           p=p->next;
           i++;
      }
      return i;
}
//把waitlist的部分节点移动到runlist
void move(int num){
      if(num&lt;=0)      return;     
      //获得runlist中合适的位置
      process *pos;
      pos=runlist;
      while(pos->next!=runlist){
           pos=pos->next;
      }
      //要移动的最后一个节点
      process *start,*end;
      end=waitlist;
      start=waitlist->next;
      for(int i=0;i&lt;num;i++)
           end=end->next;
      waitlist->next=end->next;
      pos->next=start;
      end->next=runlist;
}
//运行
void run(){     
      int time=0;
      //p当前进程的前一进程，q为当前进程
      process *p,*q;
      p=runlist;     
      while(waitlist->next!=NULL||runlist->next!=runlist){          
           move(getCount(time));
           q=p->next;
           if(p==runlist&&p->next==runlist)
                time++;
           else if(p!=runlist&&q==runlist){
                p=runlist;
           }else{               
                printf("进程名:%s\t",q->name);               
                printf("到达时间:%d\t",q->starttime);               
                printf("启动时间:%d\t",time);
                printf("运行次数:%d\t",++(q->count));
                if(q->runtime&lt;=slicetime){                         
                     printf("运行时间:%d\t",time);
                     time+=q->runtime;
                     printf("结束时间:%d\n",time);                    
                     del(p);
                }else{
                     printf("运行时间:%d\n",time);                         
                     time+=slicetime;
                     q->runtime-=slicetime;
                     p=q;     
                }
           }
      }
}
void main(){     
      printf("开始运行...\n");
      init();
      printf("显示结果...\n");
      run();
      printf("结束运行...\n");
}</pre>
          <br/>
          <span style="color:red;">
            <a href="http://burt.javaeye.com/blog/71707#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 17 Apr 2007 04:03:40 +0800</pubDate>
        <link>http://burt.javaeye.com/blog/71707</link>
        <guid>http://burt.javaeye.com/blog/71707</guid>
      </item>
      <item>
        <title>jstl sql 标签</title>
        <author>burt</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://burt.javaeye.com">burt</a>&nbsp;
          链接：<a href="http://burt.javaeye.com/blog/71706" style="color:red;">http://burt.javaeye.com/blog/71706</a>&nbsp;
          发表时间: 2007年04月17日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          数据库设置<br />&lt;sql:setDataSource var="datasource" driver="org.gjt.mm.mysql.driver" url="jdbc:mysql://localhost/db" /><br /><br />数据库查询<br />&lt;sql:query var="customer" datasource="${datasource}" <br />SELECT * FROM customers WHERE state = 'CO' ORDER BY city<br />&lt;/sql:query><br />&lt;table><br />&lt;c:forEach var="row" items="${customers.row}"><br />&lt;tr><br />&lt;td>&lt;c:out value="${row.custName}" />&lt;/td><br />&lt;td>&lt;c:out value="${row.address}" />&lt;/td><br />&lt;/tr><br />&lt;/c:forEach><br />&lt;/table><br /><br />数据库更新<br />&lt;sql:transaction dataSource="${dataSource}"><br />&lt;sql:update><br />    UPDATE account SET Balance =Balance -? WHERE accountNo = ?<br />    &lt;sql:param value="${transferAmount}"/><br />    &lt;sql:param value="${accountFrom}"/><br />&lt;/sql:update><br />&lt;/sql:transaction><br /><br />&lt;sql:dateParam>标记来设定SQL语句中的类型为日期型的参数的值<br /><br />//web.xml<br /><br />&lt;web-app><br />   &lt;resource-ref><br />     &lt;res-ref-name>jdbc/address&lt;/res-ref-name><br />     &lt;res-type>javax.sql.DataSource&lt;/res-type><br />     &lt;res-auth>Container&lt;/res-auth><br />   &lt;/resource-ref><br />&lt;/web-app><br /><br />//.jsp<br /><br />&lt;sql:setDataSource   dataSource="jdbc/address"   var="conn" />
          <br/>
          <span style="color:red;">
            <a href="http://burt.javaeye.com/blog/71706#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 17 Apr 2007 04:02:56 +0800</pubDate>
        <link>http://burt.javaeye.com/blog/71706</link>
        <guid>http://burt.javaeye.com/blog/71706</guid>
      </item>
      <item>
        <title>配置tomcat 6.0.10连接池</title>
        <author>burt</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://burt.javaeye.com">burt</a>&nbsp;
          链接：<a href="http://burt.javaeye.com/blog/71705" style="color:red;">http://burt.javaeye.com/blog/71705</a>&nbsp;
          发表时间: 2007年04月17日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          作者：飞阳<br />转载请注明出处：http://hi.baidu.com/burtcn<br /><br />在工大后院问了很久的一个问题，http://www.gdutbbs.com/viewthread.php?tid=154093<br />版主回复我的时候，我就打算再自己试一下，不行的话再参照他的代码。结果真的可以。<br /><br />参照了官方的说明文档：<br />http://tomcat.apache.org/tomcat-6.0-doc/jndi-datasource-examples-howto.html<br /><br />下面以mysql数据库为例:<br /><br />首先设置好数据库：<br /><br />登录用户名为：javauser<br />登录密码为：javadude<br />命令：grant all privileges on *.*           to javauser@localhost identified by "javadude";<br /><br />数据库：javatest<br />数据表：testdata<br />命令：<br />create database javatest;<br />create table testdata(id int not null auto_increment primary key,foo varchar(25),bar int);<br />insert into testdata values(null,'hellojava',1011);<br /><br />配置web.xml文件(位于：$CATALINA_HOME/conf/server.xml)<br /><br />在&lt;host>&lt;/host>中添加下列代码：<br /><pre name="code" class="java">&lt;Context path="/DBTest" docBase="DBTest"
          debug="5" reloadable="true" crossContext="true">
           &lt;Resource name="jdbc/TestDB" auth="Container" type="javax.sql.DataSource"
           maxAtive="100" maxIdle="30" maxWait="10000"
           username="javauser" password="javadude" driverClassName="com.mysql.jdbc.Driver"
           url="jdbc:mysql://localhost:3306/javatest?autoReconnect=true" />
          &lt;/Context></pre><br /><br />同理，在配置好sql server之后，可以设置为<br /><pre name="code" class="java">&lt;Context path="/DBTest" docBase="DBTest"
   debug="5" reloadable="true" crossContext="true">
    &lt;Resource name="jdbc/TestDB" auth="Container" type="javax.sql.DataSource"
    maxAtive="100" maxIdle="30" maxWait="10000"
    username="sa" password="sa" driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver"
    url="jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=javatest" />
   &lt;/Context></pre><br /><br />修改web应用的目录WEB-INF的web.xml文件。<br />在&lt;web-app>&lt;/web-app>中添加下列代码：<br /><pre name="code" class="java">&lt;resource-ref>
        &lt;description>DB Connection&lt;/description>
        &lt;res-ref-name>jdbc/TestDB&lt;/res-ref-name>
        &lt;res-type>javax.sql.DataSource&lt;/res-type>
        &lt;res-auth>Container&lt;/res-auth>
&lt;/resource-ref></pre><br /><br />再下载JSTL，方便操作数据库<br />http://people.apache.org/builds/jakarta-taglibs/nightly/projects/standard/<br />把jstl.jar standart.jar导入到eclipse的WEB-INF/lib目录下<br /><br />然后写一个JSP文件就可以了：<br /><pre name="code" class="java">&lt;%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %>
&lt;%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
&lt;sql:query var="rs" dataSource="jdbc/TestDB">
select id, foo, bar from testdata
&lt;/sql:query>

&lt;html>
       &lt;head>
         &lt;title>DB Test&lt;/title>
       &lt;/head>
       &lt;body>

       &lt;h2>Results&lt;/h2>
  
&lt;c:forEach var="row" items="${rs.rows}">
         Foo ${row.foo}&lt;br/>
         Bar ${row.bar}&lt;br/>
&lt;/c:forEach>

       &lt;/body>
&lt;/html></pre><br />也可以不用JSTL，自己写一个类Conn.java：<br /><pre name="code" class="java">package cn.burt.connpool;

import java.sql.*;
import javax.naming.*;
import javax.sql.*;

public class Conn {
       public static synchronized Connection get() throws Exception {
           Context ctx = new InitialContext();
           Context envctx = (Context) ctx.lookup("java:comp/env");
           DataSource ds = (DataSource) envctx.lookup("jdbc/TestDB");
           return ds.getConnection();
       }
}</pre><br />在JSP中调用这个类：<br /><pre name="code" class="java">&lt;%@ page language="java" import="java.util.*,cn.burt.connpool.*" pageEncoding="gb2312"%>
&lt;%@ page import="java.sql.*,javax.sql.*" %>

&lt;%

Connection conn=null;
Statement st=null;
ResultSet rs=null;

try{
    
      conn=get();
      st=conn.createStatement();
      rs=st.executeQuery("select * from testdata");
    
      while(rs.next()){
      System.out.println(rs.getString("foo"));
      }
    
      st.close();
      rs.close();
      conn.close();
    
}catch(Exception e){
      e.printStackTrace();
}

%></pre>
          <br/>
          <span style="color:red;">
            <a href="http://burt.javaeye.com/blog/71705#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 17 Apr 2007 04:02:01 +0800</pubDate>
        <link>http://burt.javaeye.com/blog/71705</link>
        <guid>http://burt.javaeye.com/blog/71705</guid>
      </item>
      <item>
        <title>Mysql的初步总结</title>
        <author>burt</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://burt.javaeye.com">burt</a>&nbsp;
          链接：<a href="http://burt.javaeye.com/blog/71704" style="color:red;">http://burt.javaeye.com/blog/71704</a>&nbsp;
          发表时间: 2007年04月17日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          原创 作者：飞阳<br />转载请注明出处，http://hi.baidu.com/burtcn<br /><br />迟早都要转到学习oracle的，但是现在内存吃紧，于是用Mysql练习一下也不错。<br /><br />登录命令：<br />mysql -u用户名 -p密码<br />mysql -h主机名 -u用户名 -p密码<br />例如:<br />mysql -uroot -p<br />下一步输入密码，也可以直接在p后面加上密码<br /><br />取消命令<br />在命令最后输入\c<br /><br />mysql命令提示符<br />提示符 意思　<br />　　mysql>　准备好接受新命令 <br />　　->　等待多行命令的下一行 <br />　　'>　等待下一行，收集以单引号(“'”)开始的字符串　<br />　　">　等待下一行，收集以双引号(“"”)开始的字符串 <br /><br /><br />修改密码<br />mysqladmin -u用户名 -p密码 password 新密码<br />例如:<br />mysqladmin -uroot -p111 password 222<br />grant select,insert,update,delete on *.* to root@localhost identified by "abc"<br /><br />增加用户例子<br />grant select,insert,update,delete on *.*                   to burt@"%" identified by "abc";<br />grant all privileges on *.* to china@localhost identified by "abc";<br /><br />删除权限<br />revoke all privileges on *.* from china@localhost;<br />revoke select,update,insert,delete on *.* from china@localhost;<br /><br />显示表结构<br />desc tablename;<br />describe tablename;<br /><br />显示表的sql语句<br />show create table tablename<br /><br />修改表名<br />alter table oldtablename rename newtablename;<br /><br />增加一列<br />alter table tablename add column clumnname clumndefinition;<br /><br />删除一列<br />alter tale tablename drop column columnname;<br /><br />修改列名（在弄这个的时候老是出错)<br />alter table tablename change oldcolumnname newcolumnname columndefinition<br /><br />修改列属性<br />alter table tablename modify columnname columndefinition<br /><br />增加索引<br />alter table tablename add index(columnname);<br /><br />增加主键<br />alter table tablename add primary key(columnname);<br /><br />其他修改表属性的方法请参照这里:<br />http://dev.mysql.com/doc/refman/5.1/zh/sql-syntax.html#alter-table<br /><br />显示版本信息<br />select version();<br /><br />显示当前数据库<br />select database();<br /><br />显示当前日期<br />select current_date();<br /><br />显示当前用户和时间<br />select user(),now();<br /><br />显示多行信息<br />select user();select database();
          <br/>
          <span style="color:red;">
            <a href="http://burt.javaeye.com/blog/71704#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 17 Apr 2007 03:59:54 +0800</pubDate>
        <link>http://burt.javaeye.com/blog/71704</link>
        <guid>http://burt.javaeye.com/blog/71704</guid>
      </item>
      <item>
        <title>非抢占式短作业优先调度</title>
        <author>burt</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://burt.javaeye.com">burt</a>&nbsp;
          链接：<a href="http://burt.javaeye.com/blog/71703" style="color:red;">http://burt.javaeye.com/blog/71703</a>&nbsp;
          发表时间: 2007年04月17日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          原创 作者：飞阳 <br />转载请注明出处：http://hi.baidu.com/burtcn/blog<br />不足之处请指正，谢谢<br /><br /><pre name="code" class="java">#include &lt;stdio.h>
#include &lt;stdlib.h>
#define alloc(type) (type*)malloc(sizeof(type))

//进程结构体
struct process{    
        char name[10];
        int starttime;
        int runtime;
        struct process *next;
} *pHead;

//函数声明
void create();
void insert();
int getCount(int starttime);
void delProcess(process *prev);
process* SJF(int count);

void create(){    
        pHead=alloc(process);
        pHead->next=NULL;
        char num;    
        printf("请输入进程数目:");
        scanf("%d",&num);
        printf("下面输入进程信息\n输入格式:进程名 开始时间 运行时间\n");
        for(int i=0;i&lt;num;i++){
            printf("%d:",i+1);
            insert();    
        }
}

void insert(){    
        //输入进程信息
        process *item=alloc(process);    
        scanf("%s %d %d",item->name,&(item->starttime),&(item->runtime));
        item->next=NULL;
        //插入到合适的位置，按输入时间排序
        process *p,*q;
        p=pHead;
        q=p->next;    
        while(q!=NULL&&q->starttime&lt;=item->starttime){
            p=q;
            q=p->next;
        }
        item->next=q;
        p->next=item;    
}

int getCount(int starttime){
        //返回小于指定时间的进程数目    
        process *pos;
        pos=pHead->next;
        int count=0;
        while(pos!=NULL&&pos->starttime&lt;=starttime){
            count++;
            pos=pos->next;
        }
        return count;
}

void delProcess(process *prev){
        //删除指定节点进程    
        if(prev==NULL||prev->next==NULL) return;
        process *p,*q;
        p=prev;
        q=prev->next;
        p->next=q->next;
        q->next=NULL;
        free(q);
}

process* SJF(int count){
        //返回指定时间之前，下次调用的进程
        process *minpos=NULL,*p=pHead,*q;
        int mintime=0;    
        q=p->next;
        for(int i=0;i&lt;count;i++){
            if(i==0){
                mintime=q->runtime;
                minpos=p;
            }else{            
                if(mintime>q->runtime){
                    mintime=q->runtime;
                    minpos=p;
                }
            }
            p=q;
            q=p->next;
        }
        return minpos;
}

void run(){

        int time=0;
        int count=0;
        process *p,*q;

        while(true){
            if(pHead->next==NULL) break;        
            count=getCount(time);
            if(count==0) time++;
            else{                
                if(count==1)
                    p=pHead;
                else
                    p=SJF(count);
                q=p->next;            
                printf("进程名:%s\t",q->name);
                printf("开始时间:%d\t",time);
                printf("响应时间:%d\t",time-q->starttime);
                time+=q->runtime;
                printf("结束时间:%d\t",time);
                printf("周转时间:%d\n",time-q->starttime);
                delProcess(p);
            }
        }    

}

void main(){
        create();
        printf("\n开始运行...\n");
        run();
        printf("运行结束...\n");
}</pre><br /><br />调试结果：<br />请输入进程数目:5<br />下面输入进程信息<br />输入格式:进程名 开始时间 运行时间<br />1:A 0 4<br />2:B 1 4<br />3:C 2 3<br />4:D 3 2<br />5:E 4 1<br /><br />开始运行...<br />进程名:A          开始时间:0        响应时间:0        结束时间:4        周转时间:4<br />进程名:E          开始时间:4        响应时间:0        结束时间:5        周转时间:1<br />进程名:D          开始时间:5        响应时间:2        结束时间:7        周转时间:4<br />进程名:C          开始时间:7        响应时间:5        结束时间:10       周转时间:8<br />进程名:B          开始时间:10       响应时间:9        结束时间:14       周转时间:13<br />运行结束...<br />Press any key to continue
          <br/>
          <span style="color:red;">
            <a href="http://burt.javaeye.com/blog/71703#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 17 Apr 2007 03:58:37 +0800</pubDate>
        <link>http://burt.javaeye.com/blog/71703</link>
        <guid>http://burt.javaeye.com/blog/71703</guid>
      </item>
  </channel>
</rss>