珠海网站建设尚古道策略,如何wordpress建站,建设企业网站的模式,青岛网信信息科技有限公司文章目录文件描述符文件打开与关闭文件打开文件关闭文件读写文件读文件写定位文件修改访问权限一般指的是封装了系统调用实现的应用编程接口函数#xff0c;与硬件有强耦合关系#xff08;每次调用必定会引起系统调用#xff09; 文件描述符
fd#xff08;file descriptor…文章目录文件描述符文件打开与关闭文件打开文件关闭文件读写文件读文件写定位文件修改访问权限一般指的是封装了系统调用实现的应用编程接口函数与硬件有强耦合关系每次调用必定会引起系统调用文件描述符fdfile descriptorLinux为程序中每个打开的文件分配、对应一个文件描述符文件描述符是一个非负整数从0开始分配依次递增在Linux操作系统中默认一个进程可以打开的数量是1024是0-1023的数字非固定可以修改扩增文件IO操作通过文件描述符来完成规定0为标准输入1为标准输出2为标准出错文件打开与关闭文件打开open函数用来创建或打开一个文件头文件#include sys/types.h#include sys/stat.h#include fcntl.h函数原型int open(const char *pathname, int flags);int open(const char *pathname, int flags, mode_t mode);返回值成功时返回文件描述符出错时返回EOF参数pathname文件名flag打开文件的读写方式mode打开文件时不存在创建新文件时指定该文件的存取权限注意事项open函数打开文件时使用两个参数但不能创建文件open函数创建文件时使用第三个参数用来指定新文件的存取权限只有在建立新文件时有效。此外真正建文件时的存取权限会受到umask值影响实际存取权限是mode-umaks可以打开设备文件但是不能创建设备文件mode参数文件打开的存取权限三组对文件的权限当前用户的当前用户所在组的当前用户所在组其他用户的4 r 可读2 w 可写1 x 可执行#includesys/types.h#includesys/stat.h#includefcntl.h#includestdio.h#includeunistd.hintmain(intargc,constchar*argv[]){intfd-1;if((fdopen(4.txt,O_CREAT|O_RDONLY|O_EXCL,0664))0){printf(open error!\n);return-1;}printf(open success!\n);if(!close(fd)){printf(close success!\n);}return0;}umask设定权限umask概念用来设置作为默认文件或目录的初始权限的掩码例如执行umask 002 则之后新创建的文件是664权限新创建的目录是775权限666 - 002 777 - 002666 110 110 110 ^ 002 000 000 010 _______________________ 664 110 110 100ulimit -n可以查看打开的文件数量ulimit -a当前系统可以操作的资源限制值情况文件关闭close函数用来关闭打开的一个文件头文件#include unistd.h函数原型int close(int fd);返回值正常返回0失败返回-1参数fd指定要关闭的文件关闭后文件描述符不能代表文件if(!close(fd)){printf(close success!\n);}文件读写文件读read 函数用来从文件中读取数据头文件#include unistd.h函数原型ssize_t read(int fd, void *buf, size_t count);返回值成功时返回实际读取的字节数出错时返回EOF-1注意读到文件末尾时返回0参数buf是接收数据的缓冲区count不应超过buf大小例程从指定的文件(文本文件)中读取内容并统计大小#includestdio.h#includesys/types.h#includesys/stat.h#includefcntl.h#includeunistd.h#defineN20intmain(intargc,char*argv[]){intfd-1,n0,total0;charbuf[20]{0};if(argc2){printf(Usage : %s file\n,argv[0]);return-1;}//文件必须存在if((fdopen(argv[1],O_RDWR))EOF){printf(open error\n);return-1;}printf(open success\n);while((nread(fd,buf,N))0){printf(%s,buf);totaln;}printf(Read characters: %d\n,total);printf(Finished reading\n);close(fd);return0;}文件写write 函数用来向文件写入数据头文件#include unistd.h函数原型ssize_t write(int fd, void *buf, size_t count);返回值成功时返回实际写入的字节数出错时返回EOF参数buf是发送数据的缓冲区count不应超过buf大小例程将键盘输入的内容写入文件直到输入quit#includestdio.h#includesys/types.h#includesys/stat.h#includefcntl.h#includeunistd.h#includestring.h#defineN20intmain(intargc,char*argv[]){intfd-1,n0;charbuf1[N]{0};charbuf2[N]hello world;if(argc2){printf(Usage : %s file\n,argv[0]);return-1;}//文件必须存在if((fdopen(argv[1],O_RDWR))EOF){printf(open error\n);return-1;}printf(open success\n);if((nread(fd,buf1,N))0){printf(Read error\n);return-1;}printf(Read characters: %s,buf1);printf(Finished reading\n);do{nwrite(fd,buf2,strlen(buf2));}while(n0);printf(Write characters: %d\n,n);printf(Finished writing\n);close(fd);return0;}定位文件lseek函数用来定位文件头文件#include unistd.h函数原型off_t lseek(int fd, off_t offset, int whence);返回值成功时返回当前的文件读写位置出错时返回EOF参数offset 表示偏移量字节数值whence 的选项:SEEK_SET:文件偏移量设置为文件开始加上偏移量(offset)字节SEEK_CUR:文件偏移量设置为其当前位置加上偏移量(offset)字节意思是先定位到当前的读写指针处再开始往后计算SEEK_END:文件偏移量设置为文件大小加偏移量(offset)字节意思是先定位到末尾再开始往后计算常用使用示例将读写位置移到文件开头lseek(int fildes, 0, SEEK_SET);将读写位置移到文件尾lseek(int fildes, 0, SEEK_END);获取当前文件位置off_t ret lseek(int fildes, 0, SEEK_CUR);#includestdio.h#includesys/types.h#includesys/stat.h#includefcntl.h#includeunistd.h#includestring.h#defineN20intmain(intargc,char*argv[]){intfd-1;intret0;charbuf[N]{0};if(argc2){printf(Usage : %s file\n,argv[0]);return-1;}//文件不存在if((fdopen(argv[1],O_RDWR|O_CREAT,0664))EOF){printf(open error\n);return-1;}printf(open success\n);retlseek(fd,0,SEEK_CUR);printf(%u\n,ret);read(fd,buf,10);printf(%s,buf);retlseek(fd,0,SEEK_CUR);printf(%u\n,ret);lseek(fd,0,SEEK_END);write(fd,aaa,strlen(aaa));retlseek(fd,0,SEEK_CUR);printf(%u\n,ret);retlseek(fd,0,SEEK_SET);printf(%u\n,ret);bzero(buf,sizeof(buf));while(read(fd,buf,sizeof(buf))0){printf(%s,buf);bzero(buf,sizeof(buf));}printf(Read end\n);close(fd);return0;}修改访问权限chmod/fchmod函数用来修改文件的访问权限#include sys/stat.hint chmod(const char *path, mode_t mode);int fchmod(int fd, mode_t mode);成功时返回0出错时返回EOFroot和文件所有者能修改文件的访问权限示例 chmod(“test.txt”, 0666);#includestdio.h#includesys/types.h#includesys/stat.h#includefcntl.h#includeunistd.h#defineN20intmain(intargc,char*argv[]){intfd-1,n0,total0;charbuf[20]{0};if(argc2){printf(Usage : %s file\n,argv[0]);return-1;}if(chmod(argv[1],0200)0){printf(chmod file error\n);return-1;}//文件必须存在if((fdopen(argv[1],O_RDWR))EOF){printf(open error\n);return-1;}printf(open success\n);while((nread(fd,buf,N))0){printf(%s,buf);totaln;}printf(Read characters: %d\n,total);printf(Finished reading\n);close(fd);return0;}