linux c 关闭标准出错,Linux下C编程-----文件操作(1) 通过系统调用简单操作标准输入、标准输出、标准错误...

Linux的 C系统调用操作  ,下面我们就来练习下 简单的系统调用操作

read系统调用测试

/*************************************************************************

> File Name: read.c

> Author:

> Mail:

> Created Time: Tue 10 Feb 2015 01:23:58 AM PST

************************************************************************/

#include

#include

#include

//利用管道测试程序的标准输入

//echo hello world | ./read

// ./read < a.txt

int main()

{

char buf[128] ;

int len ;

//从输入流读取数据进入到buffer 如果返回-1 那么说明读取错误

if((len=read(0,buf,128))==-1)

{

//错误写入标准错误输出

write(2,"read error\n",11) ;

}

//将通过标准输入读取的数据通过标准输出输出到控制台

if(write(1,buf,len)!=len)

{

//如果输出的长度不等于 len 说明 IO错误

write(2,"read error\n",11) ;

}

exit(0);

return 0 ;

}

write系统调用测试

/*************************************************************************

> File Name: write.c

> Author:

> Mail:

> Created Time: Tue 10 Feb 2015 12:39:05 AM PST

************************************************************************/

#include

//Linux和 Uninx有关与系统调用的封装

#include

//errno系统最后一次错误

#include

//通过自动打开文件句柄 1 也就是标准输出进行字符串输出

int main()

{

if(write(1,"hello,world\n",2)!=12)

{

write(2,"write error!\n",13) ;

}

printf("ErrorNo:%d\n",errno);

exit(0) ;

}

open系统调用测试1

/*************************************************************************

> File Name: open.c

> Author:

> Mail:

> Created Time: Tue 10 Feb 2015 02:07:54 AM PST

************************************************************************/

#include

#include

#include

#include

#include

int main()

{

char*filein="./in.txt" ;

char*fileout="./out.txt" ;

int fdin,fdout ;

char rdChar ;

//以只读方式打开输入文件

if((fdin=open(filein,O_RDONLY))==-1)

{

write(2,"OpenError!\n",11) ;

return 0 ;

}

//打开文件 文件不存在并且创建文件文件存在 会 清空文件 并且复给 文件所有者读写权限

if((fdout=open(fileout,O_CREAT|O_WRONLY|O_TRUNC,S_IRUSR|S_IWUSR))==-1)

{

//error

write(2,"OpenError!\n",11);

return 0 ;

}

//通过系统调用进行文件复制

while(read(fdin,&rdChar,1)==1)

{

write(fdout,&rdChar,1) ;

}exit(0)

return 0 ;

}

open系统调用测试2

#include

#include

#include

#include

#include

int main()

{

int fdin,fdout,len ;

char buf[10] ;

fdin=open("./in.txt",O_RDONLY);

fdout=open("./out.out",O_WRONLY|O_TRUNC|O_CREAT,S_IRUSR|S_IWUSR) ;

//效率比较高的写法 尽量少调用系统调用

while((len=read(fdin,buf,10))>0)

{

write(fdout,buf,len) ;

}

return 0 ;

lseek系统调用测试

/*************************************************************************

> File Name: lseek.c

> Author:

> Mail:

> Created Time: Tue 10 Feb 2015 05:02:51 AM PST

************************************************************************/

#include

#include

#include

#include

#include

#define STD_INPUT 0

#define STD_OUTPUT 1

#define STD_ERROR 2

//函数读取用户输出的第二个和倒数第二个字符 输入字符串大于5

int main()

{

char input[256] ;

int rdLen,wLen ;

int fdwrite,fdread;

char rdChar;

rdLen=read(STD_INPUT,input,256);

if(rdLen==-1)

{

write(STD_ERROR,"error\n",6);

exit(0);

}

if((fdwrite=open("./res.txt",O_CREAT|O_TRUNC|O_WRONLY,S_IRUSR|S_IWUSR))==-1)

{

write(STD_ERROR,"create file error",17);

exit(0) ;

}

wLen=write(fdwrite,input,rdLen);

if(wLen==-1)

exit(0);

close(fdwrite) ;

if((fdread=open("./res.txt",O_RDONLY))==-1)

exit(0);

lseek(fdread,1,SEEK_SET);

read(fdread,&rdChar,1) ;

printf("Index2:%c\n",rdChar);

lseek(fdread,-3,SEEK_END) ;

read(fdread,&rdChar,1);

printf("Index-2:%c\n",rdChar);

close(fdread) ;

return 0 ;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值