2010-04-09
第十五章 输入/输出函数
1、错误报告
perror函数 void perror( char const *message);
2、终止执行
void exit( int status ); 原型定义于stdlib.h
其中status参数返回给操作系统,用于提示程序是否正常完成,这个值和main函数返回的整型状态值相同,预定义符号EXIT_SUCESS和EXIT_FAILURE分别提示程序的终止是成功还是失败;
3、对C语言而言,所有的I/O操作知识简单地从程序移进或移出字节的事情,毫不惊奇的是,这种字节流便称为流,程序只关心创建正确的输出字节数据,以及正确的解释从输入读取的字节数据,特定I/O设备的细节对程序员是隐藏的;
4、绝大多数是完全缓冲的,这就意味着“读取”和“写入”实际上时从一块称为缓冲区德内存区域来回复制数据;
5、在进行程序调试时,在每个调试的printf函数之后立即调用fflush函数,迫使缓冲区的数据立即写入,不管它是否已满;
例如:printf( "something or other" );
fflush( stdout );
6、文本流
流分为文本流和二进制流两种,文本流的有些特性可能因系统不同而不同;
7、标准C程序运行时至少提供三种流 ......
#include <unistd.h>
#include <fcntl.h>
#include
<sys/types.h>
#include <sys/ioctl.h>
#include
<stdlib.h>
#include <stdio.h>
#include
<linux/soundcard.h>
/* 下面的三个参数是跟具体文件相关的,文件什么样,就要设置成什么样 */
#define RATE 11025
#define SIZE 16
#define CHANNELS
2 // 1表示单声道,2为立体声
/* ................ */
unsigned char
buf[RATE*SIZE/8]; //buf里面正好放一秒钟的音频,下面的计时还要用
int main()
{
int fd;
int wavfd; //wav文件的描述符
int arg; /* ..ioctl..... */
int status; /*
........ */
/* ...... */
fd = open("/dev/dsp",
O_RDWR);
if (fd < 0) {
&n ......
#include <unistd.h>
#include <fcntl.h>
#include
<sys/types.h>
#include <sys/ioctl.h>
#include
<stdlib.h>
#include <stdio.h>
#include
<linux/soundcard.h>
/* 下面的三个参数是跟具体文件相关的,文件什么样,就要设置成什么样 */
#define RATE 11025
#define SIZE 16
#define CHANNELS
2 // 1表示单声道,2为立体声
/* ................ */
unsigned char
buf[RATE*SIZE/8]; //buf里面正好放一秒钟的音频,下面的计时还要用
int main()
{
int fd;
int wavfd; //wav文件的描述符
int arg; /* ..ioctl..... */
int status; /*
........ */
/* ...... */
fd = open("/dev/dsp",
O_RDWR);
if (fd < 0) {
&n ......
linux是一个复杂的软件系统,其内核源代码往往会用到一些在应用程序设计中部常见语言成分和编程技巧,这些都是分析内核源代码的基本功,希望大家能重点掌握。
首先,gcc编译器从语言里吸收了“inline”和“const”。inline函数的大量使用,有利于提高运行效率,由此相当一部分代码从.c文件移入了.h文件。
gcc增加了一种新的基本数据类型“long
long int”用于支持64位CPU结构。
许多C语言都支持一些“属性描述符”,如“aligned”,“packed”等。相当于一些新的保留字。但是,在原来的C语言这些词并非保留字,而是一
些普通的变量,这样就会产生一些冲突。例如:inline在老的代码中已经是作为变量在使用了,为了解决这个问题,gcc将作为保留字的“inline”
设计成__inline__,这样就不会冲突了。
gcc还支持一个保留字“attribute”,用来作属性描述。如:attribute__
<<packed>>,这样pack ......
linux是一个复杂的软件系统,其内核源代码往往会用到一些在应用程序设计中部常见语言成分和编程技巧,这些都是分析内核源代码的基本功,希望大家能重点掌握。
首先,gcc编译器从语言里吸收了“inline”和“const”。inline函数的大量使用,有利于提高运行效率,由此相当一部分代码从.c文件移入了.h文件。
gcc增加了一种新的基本数据类型“long
long int”用于支持64位CPU结构。
许多C语言都支持一些“属性描述符”,如“aligned”,“packed”等。相当于一些新的保留字。但是,在原来的C语言这些词并非保留字,而是一
些普通的变量,这样就会产生一些冲突。例如:inline在老的代码中已经是作为变量在使用了,为了解决这个问题,gcc将作为保留字的“inline”
设计成__inline__,这样就不会冲突了。
gcc还支持一个保留字“attribute”,用来作属性描述。如:attribute__
<<packed>>,这样pack ......
介绍
通常,研发人员使用的是T-SQL来创建SQL Server的存储过程、函数和触发器。 而现在的SQL Server 2005已完全支持.NET通用语言运行时(CLR)了。 这就意味着,您能够使用.NET的语言,如C#、VB.NET之类的来研发SQL Server的存储过程、函数和触发器。 SQL Server 和 CLR 的集成给我们带来了n多好处,如实时编译、类型安全、增强的安全性连同增强的编程模型等。 本文中,我将向大家演示如何使用C#创建SQL Server的存储过程。 .
背景
我们在使用SQL Server存储过程时,最常做的工作就是从数据库中读取或保存数据。 其常用应用如下:
·执行一些简单的逻辑,没有任何返回值。 也没有输出参数。
·执行一些逻辑,并通过一个或更多的输出参数返回结果。
·执行一些逻辑,并返回从表中读取的一条或多条记录。
·执行一些逻辑,并返回一行或多行记录。 这些记录不是从表中读取的,而是您自定义的一些数据行。 根据专家观察,这样的理论和现象都是值得各位站长深思的,所以希望大家多做研究学习,争取总结出更多更好的经验!
为了演示如何用C#研发出这几种应用的SQL Server存储过程,我将一个一个地举出示例。 .
启用CLR集成
在您开始用C#写存储过程 ......
介绍
通常,研发人员使用的是T-SQL来创建SQL Server的存储过程、函数和触发器。 而现在的SQL Server 2005已完全支持.NET通用语言运行时(CLR)了。 这就意味着,您能够使用.NET的语言,如C#、VB.NET之类的来研发SQL Server的存储过程、函数和触发器。 SQL Server 和 CLR 的集成给我们带来了n多好处,如实时编译、类型安全、增强的安全性连同增强的编程模型等。 本文中,我将向大家演示如何使用C#创建SQL Server的存储过程。 .
背景
我们在使用SQL Server存储过程时,最常做的工作就是从数据库中读取或保存数据。 其常用应用如下:
·执行一些简单的逻辑,没有任何返回值。 也没有输出参数。
·执行一些逻辑,并通过一个或更多的输出参数返回结果。
·执行一些逻辑,并返回从表中读取的一条或多条记录。
·执行一些逻辑,并返回一行或多行记录。 这些记录不是从表中读取的,而是您自定义的一些数据行。 根据专家观察,这样的理论和现象都是值得各位站长深思的,所以希望大家多做研究学习,争取总结出更多更好的经验!
为了演示如何用C#研发出这几种应用的SQL Server存储过程,我将一个一个地举出示例。 .
启用CLR集成
在您开始用C#写存储过程 ......
介绍
通常,研发人员使用的是T-SQL来创建SQL Server的存储过程、函数和触发器。 而现在的SQL Server 2005已完全支持.NET通用语言运行时(CLR)了。 这就意味着,您能够使用.NET的语言,如C#、VB.NET之类的来研发SQL Server的存储过程、函数和触发器。 SQL Server 和 CLR 的集成给我们带来了n多好处,如实时编译、类型安全、增强的安全性连同增强的编程模型等。 本文中,我将向大家演示如何使用C#创建SQL Server的存储过程。 .
背景
我们在使用SQL Server存储过程时,最常做的工作就是从数据库中读取或保存数据。 其常用应用如下:
·执行一些简单的逻辑,没有任何返回值。 也没有输出参数。
·执行一些逻辑,并通过一个或更多的输出参数返回结果。
·执行一些逻辑,并返回从表中读取的一条或多条记录。
·执行一些逻辑,并返回一行或多行记录。 这些记录不是从表中读取的,而是您自定义的一些数据行。 根据专家观察,这样的理论和现象都是值得各位站长深思的,所以希望大家多做研究学习,争取总结出更多更好的经验!
为了演示如何用C#研发出这几种应用的SQL Server存储过程,我将一个一个地举出示例。 .
启用CLR集成
在您开始用C#写存储过程 ......
{
SqlConnection cnn = new SqlConnection
("context connection=true");
cnn.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = cnn;
cmd.CommandText = "select * from customers";
SqlDataReader reader = cmd.ExecuteReader();
SqlContext.Pipe.Send(reader);
reader.Close();
cnn.Close();
}
这个GetAllCustomers()方法用了一个[SqlProcedure]属性来修饰。 在方法内创建一个SqlConnection和一个SqlCommand对象。 然后使用ExecuteReader()方法来执行SELECT语句。 接下来用Send()方法将取得的SqlDataReader数据发送到客户端。 最后就是关闭SqlDataReader和SqlConnection。 在这种方法中,是我们自己创建的SqlDataReader。 其实,我们也能够把这个任务交给SqlContext类去完成,代码如下:
[SqlProcedure]
public static void GetCustomerByID
(SqlString CustomerID)
{
SqlConnection cnn = new SqlConnection
("context connection=true");
cnn.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = cnn;
cmd.CommandText = "select * from customers
where customerid=@p1";
SqlParameter p1 = new SqlParameter("@p1", Cu ......
{
SqlConnection cnn = new SqlConnection
("context connection=true");
cnn.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = cnn;
cmd.CommandText = "select * from customers";
SqlDataReader reader = cmd.ExecuteReader();
SqlContext.Pipe.Send(reader);
reader.Close();
cnn.Close();
}
这个GetAllCustomers()方法用了一个[SqlProcedure]属性来修饰。 在方法内创建一个SqlConnection和一个SqlCommand对象。 然后使用ExecuteReader()方法来执行SELECT语句。 接下来用Send()方法将取得的SqlDataReader数据发送到客户端。 最后就是关闭SqlDataReader和SqlConnection。 在这种方法中,是我们自己创建的SqlDataReader。 其实,我们也能够把这个任务交给SqlContext类去完成,代码如下:
[SqlProcedure]
public static void GetCustomerByID
(SqlString CustomerID)
{
SqlConnection cnn = new SqlConnection
("context connection=true");
cnn.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = cnn;
cmd.CommandText = "select * from customers
where customerid=@p1";
SqlParameter p1 = new SqlParameter("@p1", Cu ......
{
SqlConnection cnn = new SqlConnection
("context connection=true");
cnn.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = cnn;
cmd.CommandText = "select * from customers";
SqlDataReader reader = cmd.ExecuteReader();
SqlContext.Pipe.Send(reader);
reader.Close();
cnn.Close();
}
这个GetAllCustomers()方法用了一个[SqlProcedure]属性来修饰。 在方法内创建一个SqlConnection和一个SqlCommand对象。 然后使用ExecuteReader()方法来执行SELECT语句。 接下来用Send()方法将取得的SqlDataReader数据发送到客户端。 最后就是关闭SqlDataReader和SqlConnection。 在这种方法中,是我们自己创建的SqlDataReader。 其实,我们也能够把这个任务交给SqlContext类去完成,代码如下:
[SqlProcedure]
public static void GetCustomerByID
(SqlString CustomerID)
{
SqlConnection cnn = new SqlConnection
("context connection=true");
cnn.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = cnn;
cmd.CommandText = "select * from customers
where customerid=@p1";
SqlParameter p1 = new SqlParameter("@p1", Cu ......
- 加入菜鸟学习网,获得珍藏资源
Java代码 数据挖掘中决策树C4.5预测算法实现(半成品,还要写规则后剪枝及对非离散数据信息增益计算) Java代码 package org.struct.decisiontree; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.TreeSet; /** * @author Leon.Chen */ public class DecisionTreeBaseC4p5 { /** * root node */ private DecisionTreeNode root; /** * visableArray */ private boolean[] visable; private static final int NOT_FOUND = -1; private static final int DATA_START_LINE = 1; private Object[] trainingArray; private String[] columnHeaderArray; /** ......
- 加入菜鸟学习网,获得珍藏资源
Java代码 数据挖掘中决策树C4.5预测算法实现(半成品,还要写规则后剪枝及对非离散数据信息增益计算) Java代码 package org.struct.decisiontree; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.TreeSet; /** * @author Leon.Chen */ public class DecisionTreeBaseC4p5 { /** * root node */ private DecisionTreeNode root; /** * visableArray */ private boolean[] visable; private static final int NOT_FOUND = -1; private static final int DATA_START_LINE = 1; private Object[] trainingArray; private String[] columnHeaderArray; /** ......