当前位置:   article > 正文

Linux环境下运行介绍

Linux环境下运行介绍

1. 文件编程函数介绍

如果在Linux系统下学习C语言,就会了解到两套文件编程接口函数:

C语言标准的文件编程函数: fopenfreadfwritefclose

Linux下提供的文件编程函数: openreadwriteclose

传参的区别:

基于文件指针: fopen fclose fread fwrite 比较适合操作普通文件。

基于文件描述符: open close read write 比较适合操作设备文件。

2. C语言标准库提供的文件编程函数

下面介绍C语言标准库提供的文件编程函数,一般对文件常用的操作就是:创建(打开)、读、写、关闭。

其他的函数用法同理,只要把这4个函数学会了,基本的文件操作已经可以完成了。

  1. #include
  2. FILE *fopen(const char *path, const char *mode);
  3. 函数功能: 打开或者创建文件
  4. 函数参数:
  5. const char *path 填文件的路径
  6. const char *mode 填权限。比如: wb rb a+b
  7. 函数返回值: 文件打开或者创建成功返回对应的文件指针.
  8. size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
  9. 函数功能: 读文件
  10. 函数参数:
  11. void *ptr :读取数据存放的缓冲区。
  12. size_t size :每次读取的大小
  13. size_t nmemb :每次读取的次数
  14. FILE *stream :读取文件
  15. 返回值: 读取成功的次数。
  16. 比如: fread(buff,1,1000,fp); 从fp文件里读取1000个字节的数据到buff里。
  17. size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream);
  18. 函数功能: 写文件
  19. 函数参数:
  20. void *ptr :将要写入的数据缓冲区首地址。
  21. size_t size :每次写入的大小
  22. size_t nmemb :每次写入的次数
  23. FILE *stream :写入的文件
  24. 返回值: 写入成功的次数。
  25. 比如: fwrite(buff,1,1000,fp); 向fp文件里写1000个字节的数据,数据从buff里获取。
  26. int fclose(FILE *fp);
  27. 函数功能: 关闭打开的文件。

3. Linux下的系统函数: 文件编程函数

Linux下也有一套系统函数,用于文件操作,这些函数在Linux下常用于读写设备文件;当然,读写普通文件也是一样,普通文件也是磁盘上的数据,也是操作块设备驱动。

  1. #include
  2. #include
  3. #include
  4. int open(const char *pathname, int flags);
  5. int open(const char *pathname, int flags, mode_t mode);
  6. 函数功能: 打开或者创建文件
  7. 函数参数:
  8. const char *pathname : 文件的路径
  9. int flags :打开文件的权限.
  10. 比如: O_RDONLY O_WRONLY O_RDWR O_CREAT
  11. mode_t mode :创建文件时指定文件本身的权限.
  12. 比如:
  13. S_IRWXU 00700 user (file owner) has read, write and execute permission
  14. S_IRUSR 00400 user has read permission
  15. S_IWUSR 00200 user has write permission
  16. S_IXUSR 00100 user has execute permission
  17. S_IRWXG 00070 group has read, write and execute permission
  18. S_IRGRP 00040 group has read permission
  19. S_IWGRP 00020 group has write permission
  20. S_IXGRP 00010 group has execute permission
  21. S_IRWXO 00007 others have read, write and execute permission
  22. S_IROTH 00004 others have read permission
  23. S_IWOTH 00002 others have write permission
  24. S_IXOTH 00001 others have execute permission
  25. 返回值: (返回文件描述符--小整数)文件打开成功值>=0 否则<0
  26. 示例: open("123.c",O_RDWR|O_CREAT,S_IRWXU|S_IRWXG|S_IRWXO);
  27. 创建一个123.c的新文件,并且指定该文件的权限是最高权限. chmod 777 123.c一样
  28. ssize_t read(int fd, void *buf, size_t count);
  29. 函数功能: 读文件
  30. 函数参数:
  31. int fd :文件描述符. ---表示已经打开的文件。
  32. void *buf :读取数据存放的缓冲区.
  33. size_t count :读取字节数量.
  34. 返回值: 成功读取的字节数量.
  35. ssize_t write(int fd, const void *buf, size_t count);
  36. 函数功能: 写文件
  37. 函数参数:
  38. int fd :文件描述符. ---表示已经打开的文件。
  39. void *buf :将要写入到文件的数缓冲区首地址.
  40. size_t count :写入的字节数量.
  41. 返回值: 成功写入的字节数量.
  42. int close(int fd);
  43. 函数功能: 关闭已经打开的文件.

4. 案例: 实现文件拷贝功能(fopen)

例如: cp 123.c 456.c 将123.c的数据拷贝到456.c文件里。

注意: 下面这个代码需要在命令行上运行,需要给main函数传参。如果是在windows下IED软件里运行,可以将传参代码屏蔽掉,改成让用户输入,或者直接把参数固定也可以。

  1. #include
  2. //实现: cp 123.c 456.c
  3. int main(int argc,char **argv)
  4. {
  5. if(argc!=3)
  6. {
  7. printf("参数: ./a.out <源文件> <目标文件>\n");
  8. return 0;
  9. }
  10. /*1. 打开源文件*/
  11. FILE *src_fp=fopen(argv[1],"rb");
  12. if(src_fp==NULL)
  13. {
  14. printf("%s 文件打开失败.\n",argv[1]);
  15. return -1;
  16. }
  17. /*2. 创建新文件*/
  18. FILE *new_fp=fopen(argv[2],"wb");
  19. if(new_fp==NULL)
  20. {
  21. printf("%s 文件创建失败.\n",argv[2]);
  22. fclose(src_fp);
  23. return -2;
  24. }
  25. /*3. 实现文件的拷贝*/
  26. unsigned char buff[1024];
  27. unsigned int cnt;
  28. while(1)
  29. {
  30. cnt=fread(buff,1,1024,src_fp);
  31. fwrite(buff,1,cnt,new_fp);
  32. if(cnt!=1024)break;
  33. }
  34. /*4. 关闭文件*/
  35. fclose(new_fp);
  36. fclose(src_fp);
  37. return 0;
  38. }

5. 案例: 实现文件拷贝功能(open)

例如: cp 123.c 456.c 将123.c的数据拷贝到456.c文件里。

  1. #include
  2. #include
  3. #include
  4. #include
  5. //实现: cp 123.c 456.c
  6. int main(int argc,char **argv)
  7. {
  8. if(argc!=3)
  9. {
  10. printf("参数: ./a.out <源文件> <目标文件>\n");
  11. return 0;
  12. }
  13. /*1. 打开源文件*/
  14. int fd_src=open(argv[1],O_RDONLY);
  15. if(fd_src<0)
  16. {
  17. printf("源文件打开失败.\n");
  18. return -1;
  19. }
  20. /*2. 创建新文件*/
  21. int fd_new=open(argv[2],O_WRONLY|O_CREAT,S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH);
  22. if(fd_new<0)
  23. {
  24. printf("新文件创建失败.\n");
  25. close(fd_src);
  26. return -2;
  27. }
  28. /*3. 拷贝文件*/
  29. unsigned char buff[1024];
  30. int cnt;
  31. while(1)
  32. {
  33. cnt=read(fd_src,buff,1024);
  34. write(fd_new,buff,cnt);
  35. if(cnt!=1024)break;
  36. }
  37. /*4. 关闭文件*/
  38. close(fd_src);
  39. close(fd_new);
  40. return 0;
  41. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/997683
推荐阅读
相关标签
  

闽ICP备14008679号