当前位置:   article > 正文

Linux系统编程之open,write_open write

open write

1.API函数之open函数

  1. int open(const char *pathname,int flags);
  2. int open(const char *pathname,int flags,mode_t mode);

open函数返回的是一个文件描述符,打印出来的值为非负整数。(文件描述符类似于索引)

pathname:要打开的文件名。

flags:打开方式有:O_RDONLY(只读打开),O_WRONLY(只写打开),O_RDWR(可读可写打开)。

以上参数只能指定一个,下列参数是可选择的:

        O_CREAT 若文件不存在则创建它。使用此选项时,需要同时说明第三个参数mode,用其说明该新文件的存取许可权限。

        O_EXCL 如果同时指定了OCREAT,而文件已经存在,则出错。       

        O_APPEND 每次写时都加到文件的尾端。

        O_TRUNC 属性去打开文件时,如果这个文件中本来是有内容的,而且为只读或只写成功打开,则将其长度截短为0。

mode:一定是在flags使用了O_CREAT标志,mode记录待创建的文件的访问权限。

使用该函数需要包含头文件

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

先来看代码

  1. int main()
  2. {
  3.         int fd;
  4.         fd=open("./file1",O_RDWR);
  5.         printf("fd=%d\n",fd);
  6.         return 0;
  7. }

如果file1存在的话,返回的是一个非负整数,如果file1不在的话就返回一个负数,经过测试该负数的值为-1。

  1. int main()
  2. {
  3. int fd;
  4. fd=open("./file1",O_RDWR);
  5. if(fd==-1){
  6. printf("open file1 failed\n");
  7. fd=open("./file1",O_RDWR|O_CREAT,0600);
  8. if(fd>0){
  9. printf("create file1\n");
  10. }
  11. }
  12. return 0;
  13. }

如果file1不存在的话,可以用第二个open函数来创建文件,需加上|0_CREAT,0600指的是可读可写。

  1. int main()
  2. {
  3. int fd;
  4. char *buf="Hello World";
  5. fd=open("./file1",O_RDWR|O_CREAT|O_EXCL,0600);
  6. printf("%d",fd);
  7. close(fd);
  8. return 0;
  9. }

如果文件存在值输出-1,这是因为加了O_CREAT|O_EXCL

  1. int main()
  2. {
  3. int fd;
  4. char *buf="Hello World";
  5. fd=open("./file1",O_RDWR|O_APPEND,0600);
  6. printf("open sucess:fd=%d\n",fd);
  7. int n_write=write(fd,buf,strlen(buf));
  8. if(n_write!=-1){
  9. printf("write %d byte to file\n",n_write);
  10. }
  11. close(fd);
  12. return 0;
  13. }

使用O_APPEND,如果原文件有内容,则在下一行写入内容。

  1. int main()
  2. {
  3. int fd;
  4. char *buf="Hello Worldi1";
  5. fd=open("./file1",O_RDWR|O_TRUNC,0600);
  6. printf("open sucess:fd=%d\n",fd);
  7. int n_write=write(fd,buf,strlen(buf));
  8. if(n_write!=-1){
  9. printf("write %d byte to file\n",n_write);
  10. }
  11. close(fd);
  12. return 0;
  13. }

使用O_TRUNC,如果原文件有内容,则会先清空内容,再写入内容。
2.API函数之write

ssize_t write(int fd,const void *buf,size_t count);

成功是话write返回的是写入的个数。

字符串buf读取count个字节存放在fd文件描述符中指向的文件里。

使用该函数需包含文件

#include <unistd.h>

  1. #include <sys/types.h>
  2. #include <sys/stat.h>
  3. #include <fcntl.h>
  4. #include <stdio.h>
  5. #include <unistd.h>
  6. #include <string.h>
  7. int main()
  8. {
  9. int fd;
  10. char *buf="Hello World";
  11. fd=open("./file1",O_RDWR);
  12. if(fd==-1){
  13. printf("open file1 failed\n");
  14. fd=open("./file1",O_RDWR|O_CREAT,0600);
  15. if(fd>0){
  16. printf("create file1\n");
  17. }
  18. }
  19. printf("open sucess:fd=%d\n",fd);
  20. write(fd,buf,strlen(buf));
  21. close(fd);
  22. return 0;
  23. }

计算长度用strlen,sizeof计算的是but的大小,strlen计算的是buf内容的有效长度。

close(fd):关闭文件。
 

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

闽ICP备14008679号