简易信息网

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 13|回复: 0

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

[复制链接]

31

主题

50

帖子

203

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
203
发表于 2018-1-2 08:40:54 | 显示全部楼层 |阅读模式
Linux的 C系统调用操作  ,下面我们就来练习下 简单的系统调用操作
read系统调用测试

[cpp] view plain copy
print?


  • /*************************************************************************
  •     > File Name: read.c
  •     > Author:  
  •     > Mail:  
  •     > Created Time: Tue 10 Feb 2015 01:23:58 AM PST
  • ************************************************************************/  
  •   
  • #include<stdio.h>  
  • #include<unistd.h>  
  • #include<errno.h>  
  • //利用管道测试程序的标准输入  
  • //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系统调用测试

[cpp] view plain copy
print?


  • /*************************************************************************
  •     > File Name: write.c
  •     > Author:  
  •     > Mail:  
  •     > Created Time: Tue 10 Feb 2015 12:39:05 AM PST
  • ************************************************************************/  
  •   
  • #include<stdio.h>  
  • //Linux和 Uninx有关与系统调用的封装  
  • #include<unistd.h>  
  • //errno系统最后一次错误  
  • #include<errno.h>  
  • //通过自动打开文件句柄 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

[cpp] view plain copy
print?


  • /*************************************************************************
  •     > File Name: open.c
  •     > Author:  
  •     > Mail:  
  •     > Created Time: Tue 10 Feb 2015 02:07:54 AM PST
  • ************************************************************************/  
  •   
  • #include <stdio.h>  
  • #include <unistd.h>  
  • #include <fcntl.h>  
  • #include <sys/stat.h>  
  • #include <stdlib.h>   
  • 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

[cpp] view plain copy
print?


  • #include<stdio.h>  
  • #include<unistd.h>  
  • #include<sys/stat.h>  
  • #include<fcntl.h>  
  • #include<sys/types.h>  
  • 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系统调用测试


[cpp] view plain copy
print?


  • /*************************************************************************
  •     > File Name: lseek.c
  •     > Author:  
  •     > Mail:  
  •     > Created Time: Tue 10 Feb 2015 05:02:51 AM PST
  • ************************************************************************/  
  •   
  • #include<stdio.h>  
  • #include<sys/types.h>  
  • #include<unistd.h>  
  • #include<fcntl.h>  
  • #include<sys/stat.h>   
  • #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 ;  
  • }  



  今天的心情非常美丽哦!!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|Comsenz Inc. ( 沪ICP备10006327号-1

GMT+8, 2018-1-19 15:24 , Processed in 0.045113 second(s), 22 queries .

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表