C语言笔记

C语言笔记

使用#ifndef、#define、#endif组合宏定义的作用是:防止头文件的重复包含和编译。

#ifndef __XXX_H__		//if not define
#define __XXX_H__
#include <iostream>
 
// 其他代码
 
#endif
共用体:union

union 共用体名{
    成员列表
};

结构体和共用体的区别在于:结构体的各个成员会占用不同的内存,互相之间没有影响;而共用体的所有成员占用同一段内存,修改一个成员会影响其余所有成员。

共用体占用的内存等于最长的成员占用的内存
同一时刻只能保存一个成员的值

select函数
select函数是一个轮循函数,循环询问文件节点,三个fd_set分别监视文件描述符的读写异常变化,如果有select会返回一个大于0的值。如果没有则在timeout的时间后select返回0,若发生错误返回负值。可以传入NULL值,表示不关心任何文件的读/写/异常变化。

int select(int nfds,  fd_set* readset,  fd_set* writeset,  fe_set* exceptset,  struct timeval* timeout);

nfds          需要检查的文件描述字个数,所有文件描述符的最大值加1                                                
readset     用来检查可读性的一组文件描述字
writeset     用来检查可写性的一组文件描述字
exceptset  用来检查是否有异常条件出现的文件描述字。(注:错误不包括在异常条件之内)
timeout      超时,填NULL为阻塞,填0为非阻塞,其他为一段超时时间

返回fd的总数,错误时返回SOCKET_ERROR

fd_set结构体
FD_SET(int fd, fd_set *fdset);       //将fd加入set集合
FD_CLR(int fd, fd_set *fdset);       //将fd从set集合中清除
FD_ISSET(int fd, fd_set *fdset);     //检测fd是否在set集合中,不在则返回0
FD_ZERO(fd_set *fdset);              //将set清零使集合中不含任何fd

timeval结构体
long tv_sec;    //秒
long tv_usec;   //微秒
//函数指针:
int Func(int x);   /*声明一个函数*/
int (*p) (int x);  /*定义一个函数指针*/
p = Func;          /*将Func函数的首地址赋给指针变量p*/

typedef int (*point)(int x);

int *(*a[5])(int,char*);
typedef int *(*PFun)(int,char*);
int open(const char * pathname, int flags, mode_t mode);
头文件:#include <sys/types.h>    #include <sys/stat.h>    #include <fcntl.h>
O_RDONLY 以只读方式打开文件
O_WRONLY 以只写方式打开文件
O_RDWR 以可读写方式打开文件 
O_CREAT 若欲打开的文件不存在则自动建立该文件
成功返回一个>0的数,错误返回-1
标准输入的文件标识符为0
   
FILE *fopen(char *filename, char *mode);
<stdio.h>
filename为文件名(包括文件路径),mode为打开方式,它们都是字符串
"r"-只读   "w"-只写    "a"-追加;文件不存在会创建文件    "r+"-可读可写
fopen() 会获取文件信息,包括文件名、文件状态、当前读写位置等,并将这些信息保存到一个 FILE 类型的结构体变量中。
FILE *fp;
if( (fp=fopen("D:\\demo.txt","rb") == NULL ){
    printf("Fail to open file!\n");
    exit(0);  //退出程序(结束程序)
}

ssize_t read(int fd, void * buf, size_t count);
ssize_t write(int fd,void * buf ,size_t count);
#include <unistd.h>
返回读取写入的字节数;0为读写为0,<0时错误。

size_t fread(void *buffer, size_t size, size_t count, FILE * stream);
size_t fwrite(void *buffer, size_t size, size_t count, FILE * stream);
#include <stdio.h>
buffer为数据源地址,size为每个单元的字节数,count为单元个数,stream为文件流指针
返回成功写入的单元个数。如果小于count,则说明发生了错误,文件流错误标志位将被设置,随后可以通过ferror()函数判断

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值