Chinaunix首页 | 论坛 | 博客
  • 博客访问: 839107
  • 博文数量: 109
  • 博客积分: 650
  • 博客等级: 上士
  • 技术积分: 1483
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-01 17:29
文章分类

全部博文(109)

文章存档

2016年(5)

2015年(21)

2014年(16)

2013年(38)

2012年(29)

分类: 系统运维

2012-06-09 15:54:29


点击(此处)折叠或打开

  1. #include <sys/types.h>
  2. #include <sys/stat.h>
  3. #include <fcntl.h>
  4. #include <stdio.h>
  5. #include <errno.h>

  6. #define BUFFER_SIZE 1024

  7. int main(int argc,char **argv)
  8. {

  9. int from_fd,to_fd;
  10. int bytes_read,bytes_write;
  11. char buffer[BUFFER_SIZE];
  12. char *ptr;

  13. if(argc!=3)
  14. {
  15. fprintf(stderr,"Usage:%s fromfile tofile/n/a",argv[0]);
  16. exit(1);
  17. }

  18. /* 打开源文件 */

  19. if((from_fd=open(argv[1],O_RDONLY))==-1)
  20. {
  21. fprintf(stderr,"Open %s Error:%s/n",argv[1],strerror(errno));
  22. exit(1);
  23. }

  24. /* 创建目的文件 */

  25. if((to_fd=open(argv[2],O_WRONLY|O_CREAT,S_IRUSR|S_IWUSR))==-1)
  26. {
  27. fprintf(stderr,"Open %s Error:%s/n",argv[2],strerror(errno));
  28. exit(1);
  29. }

  30. /* 以下代码是一个经典的拷贝文件的代码 */

  31. while(bytes_read=read(from_fd,buffer,BUFFER_SIZE))
  32. {
  33. /* 一个致命的错误发生了 */
  34. if((bytes_read==-1)&&(errno!=EINTR)) break;
  35. else if(bytes_read>0)
  36. {
  37. ptr=buffer;
  38. while(bytes_write=write(to_fd,ptr,bytes_read))
  39. {
  40. /* 一个致命错误发生了 */
  41. if((bytes_write==-1)&&(errno!=EINTR))break;
  42. /* 写完了所有读的字节 */
  43. else if(bytes_write==bytes_read) break;
  44. /* 只写了一部分,继续写 */
  45. else if(bytes_write>0)
  46. {
  47. ptr+=bytes_write;
  48. bytes_read-=bytes_write;
  49. }
  50. }
  51. /* 写的时候发生的致命错误 */
  52. if(bytes_write==-1)break;

  53. }
  54. }
  55. close(from_fd);
  56. close(to_fd);
  57. exit(0);
  58. }
lseek对应的应该open打开操作文件,例子:

函数名称: lseek
函数原型: long lseek(int handle,long offset,int fromwhere)
函数功能: 移动文件位置指针到指定位置
函数返回:
参数说明: handle-文件句柄,offset-文件位置,fromwhere-从文件何处开始移动,该参数可使用以下宏定义:
SEEK_SET-0从文件开始位置计算offset
SEEK_CUR-1从当前位置计算offset
SEEK_END-2从文件结束位置计算offset,此时offset为负数
所属文件:


点击(此处)折叠或打开

  1. #include <sys\stat.h>
  2. #include <string.h>
  3. #include <stdio.h>
  4. #include <fcntl.h>
  5. #include <io.h>
  6. int main()
  7. {
  8. int handle;
  9. char msg[]="This is a test";
  10. char ch;
  11. handle=open("TEST.$$$",O_CREAT | O_RDWR,S_IREAD | S_IWRITE);
  12. write(handle,msg,strlen(msg));
  13. lseek(handle,0L,SEEK_SET);
  14. do{
  15. read(handle,&ch,1);
  16. printf("%c",ch);
  17. }while (!eof(handle));
  18. close(handle);
  19. return 0;
  20. }

点击(此处)折叠或打开

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <sys/stat.h>
  4. #include <unistd.h>

  5. int main()
  6. {
  7.     char result[100];
  8.     FILE *fp = NULL;
  9.     int fd = 0;
  10.     int off = 0;

  11.     fp = fopen("t.txt", "r");
  12.     fd = fileno(fp);

  13.     off = lseek(fd, 10, SEEK_SET);
  14.     printf("off=%d\n", off);
  15.     fscanf(fp, "%s\n", result);
  16.     printf("%s\n", result);

  17.     fseek(fp, 0, SEEK_SET); /*文件指针回到文件起始处*/
  18.     off = lseek(fd, 0, SEEK_SET);
  19.     printf("off=%d\n", off);
  20.     fscanf(fp, "%s\n", result);

  21.     printf("%s\n", result);

  22.     fclose(fp);
  23.     return 0;
  24. }


阅读(1096) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~