注册 | 登录
收藏 | 帮助
热门文章
编辑推荐
相关文章  
Win XP中震荡波后应采取的措施
Win 2000防毒从安装系统时开始
Win XP SP2拖放IE窗口可能引发黑
Linux系统下的病毒发展及其分类
用WinRAR解析木马病毒的捆绑原理
识破用WinRAR捆绑的木马
走近 WSH(Windows Scripting Hos
利用Windows控制台删除无法删除的
用Windows自带工具打造“免检”木
从Melissa到Zotob:Windows蠕虫1
您现在的位置: 顶尖设计 >> IT学院 >> 编程开发 >> C >> 文章正文
Linux下C语言编程--文件的操作
作者:hoyt  来源:http://linuxc.51.net  点击:  更新:2006-12-19
简介:
ildes[2]);

pipe调用可以创建一个管道(通信缓冲区).当调用成功时,我们可以访问文件描述符fildes[0],fildes[1].其中fildes[0]是用来读的文件描述符,而fildes[1]是用来写的文件描述符.
在实际使用中我们是通过创建一个子进程,然后一个进程写,一个进程读来使用的.
关于进程通信的详细情况请查看进程通信

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#define  BUFFER 255

int main(int argc,char **argv)
{
  char buffer[BUFFER+1];
  int fd[2];

  if(argc!=2)
  {
fprintf(stderr,"Usage:%s string\n\a",argv[0]);
exit(1);
  }

  if(pipe(fd)!=0)
  {
fprintf(stderr,"Pipe Error:%s\n\a",strerror(errno));
exit(1);
  }
  if(fork()==0)
   {
close(fd[0]);
printf("Child[%d] Write to pipe\n\a",getpid());
snprintf(buffer,BUFFER,"%s",argv[1]);
write(fd[1],buffer,strlen(buffer));
printf("Child[%d] Quit\n\a",getpid());
exit(0);
   }
 else
  {
close(fd[1]);
printf("Parent[%d] Read from pipe\n\a",getpid());
memset(buffer,'\0',BUFFER+1);
read(fd[0],buffer,BUFFER);
printf("Parent[%d] Read:%s\n",getpid(),buffer);
   exit(1);
  }
}

为了实现重定向操作,我们需要调用另外一个函数dup2.
#include 

int dup2(int oldfd,int newfd);

dup2将用oldfd文件描述符来代替newfd文件描述符,同时关闭newfd文件描述符.也就是说,
所有向newfd操作都转到oldfd上面.下面我们学习一个例子,这个例子将标准输出重定向到一个文件.

#include 
#include 
#include 
#include 
#include 
#include 
#include 

#define  BUFFER_SIZE 1024

int main(int argc,char **argv)
{
 int fd;
 char buffer[BUFFER_SIZE];

 if(argc!=2)
  {
fprintf(stderr,"Usage:%s outfilename\n\a",argv[0]);
exit(1);
  }

 if((fd=open(argv[1],O_WRONLY|O_CREAT|O_TRUNC,S_IRUSR|S_IWUSR))==-1)
  {
  fprintf(stderr,"Open %s Error:%s\n\a",argv[1],strerror(errno));
exit(1);
  }

 if(dup2(fd,STDOUT_FILENO)==-1)
  {
fprintf(stderr,"Redirect Standard Out Error:%s\n\a",strerror(errno));
exit(1);
  }

 fprintf(stderr,"Now,please input string");
 fprintf(stderr,"(To quit use CTRL+D)\n");  
 while(1)
  {
    fgets(buffer,BUFFER_SIZE,stdin); 
    if(feof(stdin))break;
    write(STDOUT_FILENO,buffer,strlen(buffer));
 }
 exit(0);
}

好了,文件一章我们就暂时先讨论到这里,学习好了文件的操作我们其实已经可以写出一些比较有用的程序了.我们可以编写一个实现例如dir,mkdir,cp,mv等等常用的文件操作命令了.
想不想自己写几个试一试呢?
-------------------------------------------------------------------------------

上一页  [1] [2] 






  • 上一篇文章:
  • 下一篇文章:
  • 分享此文:该页面添加到 Mister Wong 添加到雅虎Yahoo!收藏 Add to:Del.icio.us Post to Furl Digg this 添加到Google书签 reddit spurl blogmarks 365Key 评论  收藏  分享  打印
     我来说两句
    姓名:       验证码:   
    主页: 
    评分: 1分 2分 3分 4分 5分
    本频道近期热评文章:
      关于我们 | 联系我们 | 站点地图 | 广告投放 | 友情链接 | 在线留言 | 版权申明
    版权所有 © 2004-2007 顶尖设计(bobd.cn)
    未经授权禁止转载,摘编,复制本站内容或建立镜像. 沪ICP备07504942号 
    网络110
    报警服务