UNIX系统编程:文件IO(I)

1、标准C库中访问文件用的是文件指针FILE *(stdin,stdout,stderr);对于linux系统编程而言,所有对设备或文件的操作都是通过文件描述符进行的

2、当打开或者创建一个文件的时候,内核向进程返回一个文件描述符(非负整数),后续对文件的操作只需要通过文件描述符,内核记录有关这个打开文件的信息

3、一个进程启动时,默认打开了3个文件,标准输入、标准输出、标准错误,对应文件描述符是0(STDIN_FILENO)、1(STDOUT_FILENO)、2(STDERR_FILENO),这些常量定义在

unistd.h头文件中。

一、文件描述符与文件指针的转换

fileno:将文件指针转换为文件描述符

fdopen:将文件描述符转换为文件指针       FILE *fdopen(int fd, const char* mode);

 

二、open系统调用 

int open(const char *path, int flags, mode_t mode); //path 文件的名称,可以包含路径;flags文件打开模式;

mode用来规定对该文件的所有者,文件的用户组及系统中其他用户的访问权限。(文件所有者、文件用户组、文件其他用户

其中,O_RDONLY :打开一个供读取的文件

   O_WRONLY:打开一个供写入的文件

      O_RDWR:打开一个可供读写的文件

      O_APPEND:写入的所有数据被追加到文件末尾

      O_CREAT:打开文件,如果文件不存在则建立文件

    O_TRUNC:在open()时,清空文件。

这些标志的符号名称可以通过#include <fcntl>访问。

 

 //打开文件 
1
#include<unistd.h> 2 #include<sys/types.h> 3 #include<sys/stat.h> 4 #include<fcntl.h> 5 #include<errno.h> 6 7 #include<stdlib.h> 8 #include<stdio.h> 9 #include<string.h> 10 11 //#define ERR_EXIT(m) (perror(m),exit(EXIT_FAILURE)) 12 #define ERR_EXIT(m)\ 13 do\ 14 {\ 15 perror(m);\ 16 exit(EXIT_FAILURE);\ 17 }while(0) 18 //宏定义后面只能接一个语句。接do while语句 19 int main() 20 { 21 int fd; 22 fd=open("text.txt",O_RDONLY); 23 /* if(fd==-1){ 24 fprintf(stderr,"open error with errno=%d_%s\n",errno,strerro r(errno)); 25 exit(EXIT_FAILURE); 26 } 27 */ 28 /* 29 if (fd==-1) 30 { 31 perror("open error"); 32 exit(EXIT_FAILURE); 33 } 34 */ 35 if(fd==-1) 36 ERR_EXIT("open_error"); 37 printf("open success\n"); 38 return 0; 39 40 }

 

创建文件:创建一个666权限的文件,需要考虑到系统umask值:(mode & ~umask)的值才是实际文件的权限值

(666 &~ 022):644

  1 #include<unistd.h>
  2 #include<sys/types.h>
  3 #include<sys/stat.h>
  4 #include<fcntl.h>
  5 #include<errno.h>
  6 #include<stdlib.h>
  7 #include<stdio.h>
  8 #include<string.h>
  9 //#define  ERR_EXIT(m)  (perror(m),exit(EXIT_FAILURE))
 10 #define ERR_EXIT(m)\
 11         do\
 12         {\
 13                 perror(m);\
 14                 exit(EXIT_FAILURE);\
 15         }while(0)
 16 int main()
 17 {
 18         int fd;
 19         fd=open("test.txt",O_WRONLY|O_CREAT,0666);
 20         if(fd==-1)
 21                 ERR_EXIT("open error");
 22         printf("open succ\n");
 23         return 0;
          }   

 

转载于:https://www.cnblogs.com/wsw-seu/p/10838562.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值