您的位置:首页 > 教育 > 锐评 > 开发公司运营部职责_购物网站代码html_银行营销技巧和营销方法_百度竞价ocpc

开发公司运营部职责_购物网站代码html_银行营销技巧和营销方法_百度竞价ocpc

2025/5/24 10:41:28 来源:https://blog.csdn.net/m0_64412253/article/details/144379064  浏览:    关键词:开发公司运营部职责_购物网站代码html_银行营销技巧和营销方法_百度竞价ocpc
开发公司运营部职责_购物网站代码html_银行营销技巧和营销方法_百度竞价ocpc
……接上文

fputs(输入字符串)

int fputs(const char *s, FILE *stream);
   功能:向指定文件中输入一串字符
   参数:
         s:输入字符串的首地址
		 stream:文件流指针
	返回值:成功返回输出字符个数
	失败返回EOF

文件指针偏移函数

1. rewind
void rewind(FILE *stream)
功能:将文件指针定位到文件开头
参数:流指针2.ftell
long ftell(FILE *stream)
功能:计算文件指针当前的位置(相对于文件开头)
返回值:成功:返回当前文件指针相较于开头的字节数
        失败:-13.fseek
int fseek(FILE *stream, long offset, int whence);
		功能:将文件指针偏移到指定位置
		参数:
		    stream:流指针
			offset:偏移量   +5 --》相对于位置向后偏移5byte-5 --》相对于位置向前偏移5byte
			whence:相对位置SEEK_SET:开头SEEK_CUR:当前SEEK_END:结尾
		返回值:成功:0
		    失败:-1,更新errno
举例:
fseek(fp,-10SEEK_END
fseek(fp,-10SEEK_CUR

练习:使用ftell计算文件的长度

#include <stdio.h>
int main(int argc, char const *argv[])
{
    FILE *fp = fopen(argv[1],"r");if (fp == NULL){perror("fopen filed");return -1;}//定位到文件的末尾fseek(fp,0,SEEK_END);//计算文件的长度long lenth = ftell(fp);printf("len:%ld",lenth);fclose(fp);return 0;
}

文件IO

概念

内核向上提供的输出输出函数接口,叫做系统调用函数接口。基于内核,内核不同,系统调用函数接口不同,文件IO不同操作系统函数接口不通用。可移植性较差。

文件IO的特点

(API 函数接口

  1. 没有缓存机制,每次调用都会引起系统调用。
  2. 围绕文件描述符进行操作,文件描述符都是非负的整数,依次进行分配。
  3. 文件IO默认打开三个文件描述符,0(标准输入),1(标准输出),2(标准错误)
  4. 可以操作除了目录文件外的任意类型的文件。

文件描述符

文件描述符都是非负的整数,取值范围(0-1023),最多产生1024个文件描述符,文件描述符被分配的时候是连续的。关闭文件描述符之后才可以提供给其他文件使用。

函数接口

open函数打开文件)

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int open(const char *pathname, int flags);
功能:打开文件
参数:pathname:文件路径名
      flags:打开文件的方式
            O_RDONLY:只读
            O_WRONLY:只写
            O_RDWR:可读可写
            O_CREAT:创建
            O_TRUNC:清 空
            O_APPEND:追加   
 返回值:成功:返回文件描述符
         失败:-1rO_RDONLY
r+: O_RDWR
w: O_WRONLY | O_CREAT | O_TRUNC ,0666
w+: O_REWR | O_CREAT | O_TRUNC , 0666
a: O_WRONLY | O_CREAT | O_APPEND , 0666
a+: O_REWR | O_CREAT | O_APPEND , 0666当文件的打开方式中存在   O_CREAT:创建 时
int open(const char *pathname, int flags, mode_t mode);
mode:创建文件的权限  ,只有在打开方式中有O_CREAT才填充这个参数
创建的文件实际的权限位mode & ~umask。umask是权限掩码,值为0002。  如mode=0666,即创建的文件权限为0664
用于控制新文件或目录的默认权限的设置。它决定了在创建新文件或目录时,哪些权限会被屏蔽查看权限掩码:umask
修改权限掩码:umask 0000     

close函数关闭文件描述符)

 #include <unistd.h>int close(int fd);
 功能:关闭文件
 用法:close(fd); 示例代码:#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int main(int argc, char const *argv[])
{//打开文件int fd = open("./a.txt", O_RDWR | O_CREAT | O_TRUNC, 0666);if (fd == -1){perror("open err");return -1;}printf("fd:%d\n",fd);//关闭文件close(fd);return 0;
}

read函数读文件)

#include <unistd.h>
ssize_t read(int fd, void *buf, size_t count);
功能:读文件
参数:fd:文件描述符
      buf:存放内容的首地址
      count:期待读取字符的个数
返回值:成功实际读到字符的个数,读到文件结尾返回0
        失败返回-1,更新errno注意事项:使用read函数时需要注意:read读文件,一般期待读多少字符就是读多少,不会自动补’\0,遇到\n也不会自动停止读取,会继续读下一行的内容。
'\0'需要自己补充,考虑预留一个字节补'\0'使用技巧
1.通过返回值作为实际读到的字符个数,后面补‘\0;
char buf[32];
int ret = read(fd,buf,31);
buf[ret] =  '\0';
2.每次读取的内容读取之前先清空数组
清空函数:bzero memset

write函数(写文件)

 ssize_t write(int fd, const void *buf, size_t count);
功能:写文件
参数:
    fd:文件描述符
    buf:写内容存放的首地址
    count:期待写字符的个数
返回值:成功实际写字符的个数
    失败返回-1,更新errno 使用技巧:
int ret = read(fd,buf,32); //read函数返回值读取字符个数
write(fd,buf,ret);

lseek(偏移函数)

#include <sys/types.h>
#include <unistd.h>       off_t lseek(int fd, off_t offset, int whence);
	   功能:将文件指针移动到指定位置
	   参数:
	       fd:文件描述符
		   offset:偏移量  +向后 -向前
		   whence:相对位置SEEK_SET:开头SEEK_CUR:当前SEEK_END:结尾
	返回值:成功:当前位置(基于文件开头)
	        失败:-1,更新errno

lssekfd0,SEEK_SET)//偏移开头

标准IO文件IO对比

标准IO

文件IO

概念

c库中定义的一组用于输入输出的函数接口

系统中定义的一组用于输入输出的函数接口

特点

  1. 标准IO是C库中提供的一组专门用于输入输出的函数接口
  2. 标准IO不仅在Unix系统上,在很多操作系统上都实现了标准IO。
  3. 标准I/O通过缓冲机制减少系统调用,提高效率
  4. 标准I/O库的所有操作都是围绕流(stream)来进行的,在标准I/O中,流用FILE *来描述。
  5. 标准IO默认打开三个流:标准输入(stdin),标准输出(stdout),标准出错(stderr)。

  1. 没有缓存机制,每次调用都会引起系统调用。
  2. 围绕文件描述符进行操作,文件描述符都是非负的整数,依次进行分配。
  3. 文件IO默认打开三个文件描述符,0(标准输入),1(标准输出),2(标准错误)
  4. 可以操作除了目录文件外的任意类型的文件。

函数:

打开文件:fopen

关闭文件:fclose

读写操作:fgetc fputc fputs fgets fread fwrite

定位操作:fseek rewind ftell

时间:time localtime

其他:fflush fprintf perror

打开文件:open

关闭文件:close

读写操作:read write

定位操作:lseek

目录操作函数

opendir打开目录

#include <sys/types.h>
#include <dirent.h>
DIR *opendir(const char *name);
功能:打开目录文件
参数:name:文件名
返回值:成功返回目录流指针
        失败返回NULL示例代码;
#include <sys/types.h>
#include <dirent.h>
#include <stdio.h>
int main(int argc, char const *argv[])
{//打开当前目录
    DIR *dirp = opendir("./");if (dirp == NULL){perror("opendir err");return -1;}return 0;
}

closedir关闭目录

#include <sys/types.h>
#include <dirent.h>
int closedir(DIR *dirp);
功能:关闭目录
   参数:dirp:目录流指针
   返回值:成功0,失败-1,更新errno

readdir读取目录内容

#include <dirent.h>
struct dirent *readdir(DIR *dirp);
功能:读取目录中的内容
参数:dirp:目录流指针
返回值:成功返回结构体指针,读到结尾返回NULL
    失败返回NULL,更新errnostruct dirent {
           ino_t      d_ino;       /* 文件的inode号 */
           off_t      d_off;       /* Not an offset; see below */unsigned short d_reclen;    /* Length of this record */
unsigned char  d_type;      /* 文件类型,但不是所有的都支持                                          
       char           d_name[256]; /*文件名 */};

练习使用以上的三个函数实现ls的功能

#include <stdio.h>
#include <unistd.h>
#include <dirent.h>
int main(int argc, char const *argv[])
{
    DIR *dirp = opendir("./");if (dirp == NULL){perror("opendir err");return -1;}struct dirent *ch = readdir(dirp);while (ch != NULL){if (ch->d_name[0] != '.'){printf("%s  ", ch->d_name);}
        ch = readdir(dirp);}printf("\n");closedir(dirp);return 0;
}

chdir修改所处路径

chdir 修改当前所处路径#include <unistd.h>int chdir(const char *path);
     功能:改变当前所处的路径
	 参数:path:修改的路径、
	 返回值:成功0
	      失败:-1,更新errno示例代码:
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>int main(int argc, char const *argv[])
{chdir("../");int fd = open("./aa.txt", O_RDWR | O_CREAT | O_TRUNC,0777);if (fd == -1){perror("open err");return -1;}close(fd);return 0;
}

                                                                                                                                   未完待续……

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com