日度归档:2015年7月15日

I/o 重定向 dup2函数

unix shell提供i/o重定向操作符,允许用户将磁盘文件和标准输入输出联系
例:键入[root@localhost ~]#ls >a.txt
使用这个命令使shell加载和执行ls程序,将标准输出重定向到磁盘文件a.txt。
例:当一个web服务器代表客户端运行CGI程序时,其实执行的是一种相类似的重定向,在linux c中使用dup2函数来使文件进行重定向操作。
dup2 函数所需的头文件 #include < unistd.h>
函数原型: int dup2(int oldfd,int newfd);
返回结果: 成功则返回非负的描述符,出错 则返回-1;
函数说明:dup2函数的功能是将描述符oldfd copy 到newfd上,如果newfd已经打开,dup2函数会先关闭newfd,然后再copy oldfd到newfd上。


代码:
#include < stdio.h>
#include < fcntl.h> //open函数需要使用头文件
#include < stdlib.h>
#include < unistd.h>
int main(){
int fd1;
int i=0;
fd1 = open(“t2.txt”,O_RDWR,0); //可写模式打开文件
if(fd1 >0){
printf(“file read success!\n”);
}
dup2(fd1,1); //将fd1句柄赋值到标准输出上,在程序中的标准输出都将会输出到文件fd1中

for(i=0;i<3;i++){ printf("write file %d\n",i); } close(fd1); return 0; }


运行效果:
linux c dup2

相关阅读:
linux c打开文件的方法

RIO 带缓冲的输入函数

通常一个文本行是一个换行符结尾的ASCII码字节系列。在unix系统中,换行符”\n”ASCII(LF),数字值(0x0a),
如何检测一个文本行的长度:
1 使用read函数 一次一个字节地从文件中传送到用户存储器中,当检测到换行符时,文本行读取完毕,这种方法的缺点:每读取一个字节都要调用内核
2 使用RIO带缓冲的读取函数(rio_readlineb),它先从一个内部读缓冲区copy一个文本行,当缓冲区变空时,再次调用read函数重新将缓冲区填满,对于既包含文本行也包含二进制数据文件,RIO提供一个rio_readn带缓冲区的版本。
void rio_readinitb(rio_t *rp, int fd);


ssize_t rio_readlineb(rio_t *rp ,void *usrbuf,size_t maxlen);
ssize_r rio_readnb(rio_t *rp,void *usrbuf,size_t n);
函数简介:


1 调用rio_readinitb函数,它的功能是将文件描述符fd和地址rp进行关联。
2 rio_readlineb函数的功能从文件rp读出一个文本行(包含文本换行符),将文本行copy到usrbuf,并且用null字符来结束这个文本行,rio_readlineb一次最多可以读maxlen-1个字节。
3 rio_readnb函数从文件rp最多读n个字节到存储器usrbuf中。

相关阅读:
read函数读取文件

回发或回调参数无效 的解决办法

最近跟踪系统日志,经常发现”回发或回调参数无效” 这种异常现象。
textbox中输入特殊字符 在输入传送至后台时,对特殊字符进行转义 。

常用的解决办法:
在页面< page 中加入 EnableEventValidation="false"