int IntCmp(const void* pv1,const void* pv2) 比较大小
qsort(arr,10,sizeof(int),IntCm);
int IntCmp(const void* pv1,const void* pv2)
{
int x=(int)pv;
int y=(int)pv;
return x-y;
}
int IntCmp(const void* pv1,const void* pv2)
{
float x=(float)pv1;
float y=(float)pv2;
return x-y;
}
wfd = open(argv[2],O_WRONLY | O_CREAT | O_TRUNC,0666);
ret = read(rfd,&ch,1);
while(ret == 1)
{
write(wfd,&ch,1);
ret = read(rfd,&ch,1);
}
定义:struct Data
{
double score; //…
int len ;
char buf[1];//变长成员 最后一个
};
struct sigaction
{
void (*sa_handler)(int)//id
}
execl()其中后缀"l"代表list也就是参数列表的意思,第一参数path字符指针所指向要执行的文件路径, 接下来的参数代表执行该文件时传递的参数列表:argv[0],argv[1]… 最后一个参数须用空指针NULL作结束。
sscanf(argv[1],"%d",(int*)&pid);
struct sigaction mycat={NULL};
mycat.sa_handler=HandleINT;
sigenptyset(&mycat.sa_mask);
myact.sa_flag=0;
sigaction(SIGINT,&myact,NULL);
while(1)
{
if(gx)
{
printf(“hello\n”);
}
sleep(1);
return 0;
}
void HandleINT(void* pv)
{
if(gx0)
gx=1;
if(gx1)
gx=0;
}
kill(pid,SIGINT);
fd_set rfds;
fd_set rfds;//实际上是一long类型的数组
while(1)
{
FD_ZERO(&rfds);
FD_SET(0,&rfds);
FD_SET(rfd,&rfds);
ret=select(rfd+1;&rfds,NULL.NULL.NULL);
if(ret<0)
{
if(errno==EINTR)
{
continue;
}
else
{
printf(“select failed\n”);
break;
}
}
if(FD_ISSET(0,&rfds))
{
fget(buf,64,stdin);
len=strlen(buf)+1;
write(wfd,buf,len);
if(strncmp(buf,“quit”,4)==0)
{
break;
}
else
{
printf("Second say to me:");
}
}
if(FD_ISSET(rfd,&rfd))
{
read(rfd,buf,64);
printf("Second say to me:%\n",buf);
}
close(rfd);
close(wfd);
return 0;
}
C库中的全局变量 对应的文件描述符
FILE* stdin; 0
FILE* stdout; 1
FILE* stderr; 2
N维数组实际都是一维数组,该一维数组的元素是N-1维数组
数组作为形参等价于指向元素的指针
数组定义语句的数组名是指向下标为0的元素的常量指针
功能
提供什么(形参)
结果如何
指针类型的形参可分为:
- 值参数:只读指向空间的内容
- 结果参数:只写指向空间的内容
- 值-结果参数:既读又写指向空间
O_WRONLY | O_CREAT | O_TRUNC
形参的本质:变量定义
实参的本质:表达式(代表一个值)
字符串常量定义:1,不可变的字符数组 2 位于数据区 3 字符串常量叫“xx”它就名字就是什么。
全局的const修饰的变量
const int gx =200;(如果你在代码中不想修改k的值,可以加const帮助提醒)
{
const int k=3;(空间在栈,但是可以通过取地址修改k的值)
}
变量按定义位置:
1,函数体外--------------全局变量 作用域:(全局数据区)
2,函数体肉--------------局部变量 作用域:(栈)
3,函数头-----------------形参 作用域:(函数体)