系统函数

.system("/etc/rc.d/init.d/leds start"); 就相当于在开发板的终端下输入system里面的命令

 2. int fd = open("/dev/leds", 0);  第一个参数是打开的文件驱动,第二个参数是打开文件的权限。详见linux系统函数,不成功会返回-1

int fd = open("/dev/leds0", 0); //先打开一个虚拟设备

if (fd <</SPAN> 0) {

fd = ::open("/dev/leds", 0);

}

if (fd <</SPAN> 0) {

perror("open device leds");

exit(1);

}

buttons_fd = open("/dev/buttons",0); /* 以0 方式打开*/ 

if(buttons_fd < 0) /* 打开出错就会返回一个负值*/

     { 

    perror("open device buttons"); /*perror函数?*/ 

           exit(1); /* 返回1*/ 

     }



3.close(fd); // 关闭设备

4. ioctl是设备驱动程序中对设备的I/O通道进行管理的函数,如 ioctl(fd, 1, iData); 第一个参数是文件描述符,第二个是cmd,第三个是传递的数据。

5. read()函数  在用之前要先定义buf count  char buff[];char 型的  const可以利用buff来生成 。const可以多余要读的字节数。

ssize_t read(int fd, char *buf, size_t count); 
返回值:成功返回读取的字节数,出错返回-1并设置errno,如果在调read之前已到达文件末尾,则这次read返回0
6. 
write()函数  在用之前要先定义buf count

函数向打开的设备或文件中写数据。ssize_t write(int fd, const void *buf, size_t count);

返回值:成功返回写入的字节数,出错返回-1并设置errno写常规文件时,write的返回值通常等于请求写的字节数 count,而向终端设备或网络写则不一定。

7. sscanf(buffer, "%d", &value);  sscanf()函数即将字符型的数据转换成整型的数据输出。。和sprintf()函数相反

8. void *mmap(void *start,size_t length,int prot,int flags,int fd,off_t offset);

  //start 指向欲对应的内存起始地址,通常设为NULL,代表让系统自动选定地址,对应成功后该地址会返回
//参数length代表将文件中多大的部分对应到内存。
//参数prot代表映射区域的保护方式
//fd文件描述符
//参数offset为文件映射的偏移量,通常设置为0,代表从文件最前方开始对应,offset必须是分页大小
//的整数倍,映射文件的起动位移量受系统虚存页长度的限制,那么如果映射区的长度不是页长度的整数
/倍时,将如何呢?假定文件长12字节,系统页长为512字节,则系统通常提供512字节的映射区,其中
//500字节被设为0。可以修改这500字节,但任何变动都不会在文件中反映出来

//若映射成功则返回映射区的内存起始地址,否则返回MAP_FAILED(-1
内核空间调用

int (*mmap) (struct file *filp, struct vm_area_struct *vma);   映射之前要申请内存  //通常只用于块设备

9. memset()函数原型是extern void *memset(void *buffer, int c, int count)        buffer:为指针或是数组,c:是赋给buffer的值, count:是buffer的长度. Memset 用来对一段内存空间全部设置为某个字符,一般用在对定义的字符串进行初始化为‘ ’‘/0’

10. wait(NULL);等待子进程退出

  pid = wait(NULL);

  如果成功,wait会返回被收集的子进程的进程ID,如果调用进程没有子进程,调用就会失败,此时wait返回-1,同时errno被置为ECHILD。


11. if((shmid = shmget(IPC_PRIVATE,5,PERM))== -1)

exit(1);
p_addr = shmat(shmid,0,0);
memset(p_addr,'\0',1024);
申请共享内存,并映射和初始化

12.   select()函数 它能够监视我们需要监视的文件描述符的变化情况——读写或是异常。 即可以监视多个文件有无数据的输入   http://blog.csdn.net/olinxi1234567/article/details/24256821

使用select函数的过程一般是:
    先调用宏FD_ZERO将指定的fd_set清零,然后调用宏FD_SET将需要测试的fd加入fd_set,接着调用函数select测试fd_set中的所有fd,最后用宏FD_ISSET检查某个fd在函数select调用后,相应位是否仍然为1。

以下是一个测试单个文件描述字可读性的例子:  
int isready(int fd)
{
int rc;
fd_set fds;
struct tim tv;
FD_ZERO(&fds);
FD_SET(fd,&fds);
tv.tv_sec = tv.tv_usec = 0;
rc = select(fd+1, &fds, NULL, NULL, &tv);
if (rc < 0) //error
return -1;
return FD_ISSET(fd,&fds) ? 1 : 0;
}

fd_set rds; /*fd_set 是types.h中定义的类型,实质上是int 型*/ /*rds 用来存储设备号*/ 

int ret;
FD_ZERO(&rds); /*rds 初始化*/
FD_SET(buttons_fd, &rds); /*将buttons设备号赋给rds*/
/*监听获取键值*/   /*使用系统调用select 检查是否能够从/dev/buttons 设备读取数据*/ 
ret = select(buttons_fd + 1, &rds, NULL, NULL, NULL);select的用法  监听阻塞事件

/*对ret 的处理*/ 

if(ret < 0) /* 当ret 小于0*/  错误  

{

perror("select"); 

exit(1);

        }  

if(ret == 0) /*当ret 等于0*/  超时

{

printf("Timeout.\n"); 


else /* 能够读到数据*/ 
if(FD_ISSET(buttons_fd,&rds)) /*用于测试指定的文件描述符是否在该集合中*/ 

/* 读取键盘驱动发出的数据*/ 

13. 一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间。然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来的进程的值不同。相当于克隆了一个自己。

14. 当进程调用一种execl函数时,该进程完全由新程序代换,而新程序则从其main函数开始执行。因为调用execl并不创建新进程,所以前后的进程ID并未改变。execl只是用另一个新程序替换了当前进程的正文、数据、堆和栈段.


15ls > count.txt  将当前目录下的所以文件列些出来,放在count.txt文件中,是一个文件名占一行。

system("ls > count.txt");


16.  Calendar Time:日历时间,是用“从一个标准时间点到此时的时间经过的秒数”来表示的时间。这个标准时间点对不同的编译器来说会有所不同,但对一个编译系统来说,这个标准时间点是不变的,该编译系统中的时间对应的日历时间都通过该标准时间点来衡量,所以可以说日历时间是“相对时间”,但是无论你在哪一个时区,在同一时刻对同一个标准时间点来说,日历时间都是一样的

17.memcpy()函数可以用于对于内存的访问,共享内存和非共享内存

void *memcpy(void*dest, const void *src, size_t n);

功能:由src指向地址为起始地址的连续n个字节的数据复制到以destin指向地址为起始地址的空间内。


18.子进程运行结束后(正常或异常),并没有马上从系统的进程分配表中被删掉,而是进入僵死状态(Zombie),一直等到父进程来回收它的结束状态信息。如果父进程没有回收走子进程的结束状态就已经退出,子进程将永远处于僵死状态;也有例外,如父进程先于子进程结束,子进程将被init进程继承,并回init进程回收其结束状态信息。。谁创建谁负责        在进程运行结束后,我们会显示的调用exit()或者return退出正在运行的进程,如果调用return的话,编译器会自己加上exit().此时,保存子进程的一部份信息是很有必要的,因为父进程可以读取这些消息而取得子进程的退出状态.如果子进程退出.但父进程没有用wait(),这就成为了我们常说的僵尸进程,

19.摄像头应用程序的编写步骤

打开设备-> 检查和设置设备属性->设置帧格式-> 设置一种输入输出方法(缓冲区管理)-> 循环获取数据-> 关闭设备。


20.time_t t = time(NULL);  

pic_name = ctime(&t);//pic_name 为char*型的字符串 就我们通常所看到的时间格式

21.使用UDP进行程序设计可以分为客户端和服务器端两部分。

1.服务器端程序包括:

Ø  建立套接字

Ø  将套接字地址结构进行绑定

Ø  读写数据

Ø  关闭套接字

2.客户端程序包括:

Ø  建立套接字

Ø  读写数据

Ø  关闭套接字

它们分别对应socket(),bind(),sendto(),recvfrom(),和close()函数。

22.

struct tm *local;
time_t t;
t=time(NULL);
local=localtime(&t);
printf("Local hour is: %d\n",local->tm_hour);

获得本地时间

 23.kill(play_pid,SIGKILL);杀死进程

24.Linux中库文件的生成   http://blog.csdn.net/olinxi1234567/article/details/41286061

24.原型:extern void *malloc(unsigned int num_bytes);

头文件:#include <malloc.h> 或 #include <alloc.h> (注意:alloc.h 与 malloc.h 的内容是完全一致的。)

功能:分配长度为num_bytes字节的内存块

说明:如果分配成功则返回指向被分配内存的指针,否则返回空指针NULL。

当内存不再使用时,应使用free()函数将内存块释放

申请内存

1:用户空间申请内存

void *malloc(size_t size) //返回类型为空指针类型
void free(void *ptr);

Malloc()函数用来在堆中申请内存空间,free()函数释放原先申请的内存空间。Malloc()函数是在内存的动态存储区中分配一个长度为 size 字节的连续空间.

2:内核空间申请内存

在内核空间中,设计到申请内存的函数有kmalloc(),__get_free_page()和vmalloc函数。kmalloc()和__get_free_page()申请的内存位于物理内存映射区域,在物理上是连续的,而且与真实的物理地址只有一个固定的偏移。而vmalloc是在虚拟内存空间中申请一片连续的区域,而这片区域在物理地址上,不一定连续。

Void *kmalloc(size_t size, int flags);

__get_free_pages(unsigned int flags, unsigned int order);

Void *vmalloc(unsigned long size);

释放内存,分别对应为:

Void kfree(void *ptr);

Void free_page(unsigned long addr);

Void vfree(void *ptr);


23.

while(1)

{

exit(1);//终止这次循环,继续下次循环

}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值