嵌c基础Linux源代码_第1页
嵌c基础Linux源代码_第2页
嵌c基础Linux源代码_第3页
嵌c基础Linux源代码_第4页
嵌c基础Linux源代码_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、arm嵌入式linux系统开发详解.linuxx应用程序开发详解源代码#include <stdio.h>int main()printf (z,hello world!n,z);return 0;/从文件读写成块数据ttinclude <stdio. h>int main()int buf1024二0;int p;file *fp = fopen(". /blk_file. dat", "rb+); if (null二fp)return t;fwrite(buf, sizeof (int), 1024, fp) ;/ 把 1024个数据块

2、写入文件流fp,每个数据块4个字节/*修改buf的数据,供读取后比较*/for (i二0;i<16;i+)bufi二-1;p = &buf0; /设置指针p指向buf,供从文件读取数据使用 fread(p, sizeof (int), 1024, fp) ;/ 从文件读取 1024个数据块到buf,每个数据块4个字节/*打印从文件读取的二进制数据*/for (i=0;i<1024;i+) printf (,zbuf %d = %dn, i, buf i);fclose(fp) ;/最后别忘了关闭文件return 0;ttinclude <stdio.h> int

3、 main()file *fp = null;char *buf3 = 用"this is first line! n,z, "second line!n,z,"ok, the last line!nz,; char tmpbuf364, *p;用int i;/定义文件指针/定义三个字符串,供写入文件使/定义字符串缓存,供读取文件使fp = fopen(,zchap7_demo. dat,z, ,zrb+,z) ;/ 使用读写方式打开文件,并且把文件长度置0if (null二二fp) printf ("error to open file!n,z);re

4、turn t;/把三个字符串写入文件for (i=0;i<3;i+)fputs(bufi, fp);fseek(fp, 0, seek_set) ;/把文件指针设置到文件开头,相当于 rew in d(fp)/从文件读取三个字符串到缓存for (i=0;i<3;i+) p = tmpbufi;fgets(p, 64, fp);printfr%s p);打印刚读取出来的字符串到屏幕fclose (fp);/别忘记关闭文件return 0;/ c_memory_te s t c#include <stdio. h>sinclude <stdlib. h>int

5、main()char *p_strl, *p_str2;/定义两个char*指针/*使用malloc ()函数分配内存*/p_strl 二(char*)malloc(32);if (null=p_strl) /检查内存分配是否成功printf (,zalloc p strl memory error!n,z); return t;/*使用calloc ()函数分配内存*/p_str2 = (char*)calloc(32, sizeof(char);if (null二二p_str2) /检查内存是否分配成功printf (z,alloc p_str2 memory error!nz,); fr

6、ee(p_strl) ;/注意,这里需耍释放p_strl占用的内存return t;strcpy(p_strl, "this is a simple sentenee.);/p_strl写入一个字符串strcpy(p_str2, p strl) ;/ p_str2写入与p_strl相同的字符串/*打印p_strl的结果*/printf (,zp_strl by malloc () :n,z);printf(p strl address: ox%. 8xp strl);/ p strl的内刼也址printf (,zp_strl: %s (%d chars) n,z, p_strl, s

7、trlcn(p_strl) ;/p_strl的内容/*打印p_str2的结果*/printf czp_str2 by cal loc () : n);printf (,zp_str2 address: ox% 8xrt, p_str2) ;/ p_str2的内存地址printf (,zp_str2: %s (%d chars) n,/, p_str2, strlen(p_str2) ;/p_str2的内容/*为p_strl重新分配内存(减小)*/p_strl = (char*)realloc (p_strl, 16);if (null=p_strl) /检查内存分配结果printf (,zre

8、alloc p strl memory error!n); free(p_str2) ;/注意,需要释放p_str2占用的内存return -1;p_strl15二0' ;/写字符串结束符/*为p_str2重新分配内存(增大)*/p_str2 二(char*)realloc(p_str2, 128);if (nui丄二二p_str2) /检查内存分配结果printf (z,realloc p_str2 memory error!nz,);free(p_strl) ;/注意,需耍释放p_strl占用的内存return t;strcat (p_str2, "the second

9、sentence in extra memory after realloced!,z);/*打印p_strl的结果*/printf(p strl after reallocedn);printf (,zp_strl address: ox% 8xrt, p_strl) ;/ p_strl的内存地址printf (,zp_strl: %s (%d chars) n,/, p strl, strlen(p strl) ;/p_strl的内容/*打印p_str2的结果*/printf (,zp_str2 after realloced:n);printf (,zp_str2 address: ox

10、%. 8xrt, p_str2) ;/ p_str2的内存地址printf czp_str2: %s (%d chars)n,p_str2, strlen(p_str2);/p_str2的内容/*注意,最后要释放占用的内存*/free (p strl) ;/ 释放p strl 占用的内存frcc(p_str2) ;/ 释放p_str2 占用的内存return 0;/*注意posix操作文件函数使用不同的头文件*/ #inelude <sys/types.h>#include <sys/stat. h>ftinclude <unistd. h>#include

11、 <fcntl. h> include <stdio. h>#inelude <crrno. h> extern int errno;int meiin()int fd;/注意,文件描述符是整型值char buf64二"this is a posix f订e!(line1)off_t currpos;fd = openc./posix. data", o_creat| o_rdwr| o_excl, s_1rwxu);打开一个不存在的文件,并创建文件,权施是用户可读写执行if (t二二fd) /检查文件打开是否成功switch (errn

12、o) case eexist:/文件已存在printf("file exist!n,z);break;default:/其他错误printf (,zopen file fail! n,z);break;return 0;writc(fd, buf, strlcn(buf) ;/ 把字符串写入文件curr_pos = lseek(fd, 0, seek_cur) ;/取得当前文件偏移量位置printf(f订e point at: %dcurrpos);iscckcfd, 0, seek.set) ;/把文件偏移量移动到文件开头strepy (buf, f订e pointer moved

13、! n,z);write(fd, buf, strlen(buf) ;/ 把新的数据写入文件filc_modc = fcntl(fd, f_getfl) ;/ 获取文件状态标记if (-1!=file_mode) switch (file_mode&0_accm0de) / 检查文件状态case o_rdonly:printf ("file mode is read 0nlyn,/);/存放在栈区char var_str二 “stringl”char *p_strl, *p_str2;/char *p_str3 = “string2” ;放在栈区static int var_

14、b = 100;/存放在栈区 存放在栈区/存放在已初始化数据区ptr_str3存全局静态数据,存放在已初始化区p_strl = (char*)malloc(1024); p_str2 = (char*)malloc(2048); free (pstrl);free(p_str2);/从堆区分配1024字节内存/从堆区分配2048字节内存break;case o_wronly:printf (,zfile mode is write 0nlyn/,); break;case o_rdwr:printf (z,file mode is read & writen); break;close

15、(fd);return 0;/test.cint g_var_a =0; char g_var_b;/存放在全局已初始化数据区/存放在bss区(未初始化全局变量)int main()int var_a;return 0;/ filenamegetenv. c -获取环境变量测试sinclude <stdio. h> #include <stdlib. h>char envpath = "path" char *env_value 二 null;/打算获取的环境变量名称/环境变量值cnv_valuc = gctcnv (cnv_path) ; /使用系

16、统函数获取指定环境变量 if (null=env_value)/检查是否获取到变量的值printf (/znot found!n,z);printf cget env path:n%s,z, env value) ; / 输出path环境变量的值 return 0;ttincludesys/types. h>include <unistd. h> #inelude <stdio. h> ttinclude <stdlib.h> int inainopid_t pid;pid = forko ;/创建进程if (t二二pid) /创建进程失败printf

17、 ("error to create new process!n); rcturn 0;else if (pid=0) / 子进程printf(child process!n); else /父进程printf (,zparent process! child process id: %dpid);return 0;/ process_demo. c#inelude <sys/types.h> ttinclude <sys/stat. h> #inelude <unistd.h sinclude <stdio. h> #include <

18、;stdlib. h>pidt pid, pidwait; int fd2;char buff64, *cmd 二"exit"/创建管道/子进程/关闭写操作if (pipe(fd) perror (,zcreate pipe fail!,z); return 0;pid = fork();if (-l=pid) perror (,zcreate process fail!,z);return 0; else if (0=pid) close(fdl);printf (,zwait command from parent! n,z); while(l) read (fd

19、o> buff, 64);if (0=strcmp(buff, cmd) printf("recv command ok!n); close(fd0);exit (0); else /父进程printf (''parent process! child process id: %drt, pid); close(fd0) ;/关闭读操作sleep(2);printf("send command to child processrt);write(fdl, cmd, strlen(cmd)+1) ;/ 写入命令close(fdl);return 0;tt

20、include <sys/typesh> #include <unistdh> #inelude <stdio. h> ttinclude <stdlib. h> include <string. h>int fd2;pidt pid;char buf 64二,t,m parent process! n,z;/ 父进程要写入管道的信息char line64;if (0!二pipe(fd) /创建管道并检查结果pipe!n,z);fprintf(stderr, "fail to creatercturn 0;pid 二 for

21、k() ;/ 创建进程if (pid<0) fprintf (stderr, z,fail to create process! n,z);return 0; else if (0=pid) close(fd0);管道写入数据writc(fdl, buf, strlcn(buf); close(fdl); else close(fdl);管道读取数据 rcad(fd0, line, 64);printf(z,data from parent: %s", close(fd0);/父进程/关闭读管道,使得父进程只能向/写数据到管道/关闭写管道/子进程/关闭写管道,使得子进程只能从/

22、从管道读取数据 line);/关闭读管道rcturn 0;itinclude <stdio. h>jtincludc <stdlib. h>ttinclude <unistd. h>void bye (void)/退出时回调的函数printf (,zthat was all, folksrt);printf ("this should called first!n,z);int main() long a;i二atexit(bye);/设置退岀冋调函数并检查返冋结果if (i != 0) fprintf(stderr,nnot set exit f

23、unction byen);return exit_failure;i = atcxit(bycl);/设置退岀回调函数并检查返回结果if (i!=0) fprintf (stderr, "cannot set exit function byeln");return exit_failure;return ex1t_success;include <sys/typesh> ttinclude <unistd. h> include <stdio. h>#inelude <stdlib.h>int ni3in()pidt pi

24、d, pidwait; int status;pid = fork();if (-l=pid) /创建子进程/检查是否创建成功printf (,zerror to createnew process!n");return 0;else if (pid=0) printf (z,child process! n); else /子进程/父进程printf (,zparent process! child process id: %dpid);pid_wai t 二 waitpid(pid, &status, 0) ;/ 等待指定进程号的子进printf (,zchild pro

25、cess %d returned!n,z, pid wait); "rcturn 0;#include <pthread h> #inelude <stdio. h> ttinclude <stdlib. h>void* thread_func(void *arg) "int *val = arg;printf("hi, i'm a thread!n,z);if (null!=arg) 印参数内容wh i1e (1)printf (,zargument set: %drt, *val);/线程函数/如果参数不为空,打in

26、t main()pthread_t tid; int targ = 100;值/线程1d/给线程传入的参数if (pthrcad_crcatc(&tid, mull, thrcad_func, &t_arg)/ 创建线程perror (''fail to create thread,z);sleep(l);执行printf (z,main thread!n); pthread cancel(tid);/睡眠1秒,等待线程/取消线程return 0;ttincludepthread h> itinclude <stdio. h>sinclude

27、<stdlib.h>void* thread_func(void *arg) "int *val 二 arg;printf("hi, i'm a thread!n,z);if (null!=arg)参数内容printf (argument set: %dn/z, *val);/线程函数/如果参数不为空,打卬int main()ptbread_t tid;int t_arg 二 100;/线程id/给线程传入的参数值if (pthread create(&tid, null, thread func, &t arg)/ 创建线程perror

28、(/zfail to create thread");slccp(l);printf("main thread!n);/睡眠1秒,等待线程执行return 0;/ pthread_demo< c #include <pthread. h> #inelude <unistd.h sinclude <stdio. h> #include <stdlib. h>/ mid线程声明/ tcrni线程声明/存放线程idvoid* mid_tbread(void *arg); void* tcrm_thrcad(void *arg);in

29、t main()ptbread_t mi d_ti d, term_ti d;if (pthread_create(&mid_tid, null, mid_thread, null) / 创建mid线程perror (/zcreate mid thread error!/z);return 0;if (pthread create(feterm tid, null, term thread, (void*)&inid_tbread) /创建term线程pcrror ('"crcatc term thrcad fail! n);return 0;if (pthr

30、ead join(mid tid, null) / 等待mid线程结束pcrror (,zwait mid thread error!,z);return 0;if (pthread join(term tid, null) / 等待term线程结束pcrror (,zwait term thrcad error!z,);return 0;return 0;void* mid thread (void *arg)/ mid线程定义 "int times 二 0;printf(mid thread created!n);while(l) /不断打印等待的次数,间隔2秒printf (/

31、zwaitting term thread %d times!n,times);sleep (2);times+;/ tenn线程定义/如果线程id合法,结束线程void* term thread (void *arg) "pthrcad_t *tid;printf(z,term thread created!n); sleep(2);if (null!=arg) t i d = (pthread_t*)arg; pthrcad_canccl(*tid);/ shm_read> c -> gcc -o r shm_read. c#inelude <sys/ipc.

32、h>#inelude <sys/shm. h>#inelude <sys/typcs. h>ftinclude <unistd. h>int main()int shmid;/定义共享内存idchar *ptr;shmid = shmget(0x90, 1024, shm_w|shm_r| ipc_excl) ;/ 根据key获得共享内存idif (-l=shmid)perror(z,create share memory");ptr = shmat (shmid, 0, 0) ;/通过共享内存id获得共享内存地址if (void*)t二二p

33、tr) perror (z,get share memory'7);printf (/zstring in share memory: %sptr) ;/ 打印共享内存中的内容shmdt(ptr);return 0;/ shm_write. c -> gcc -o w shm_write. c #include <sys/ipc. h>#inelude <sys/shm. h>#includesys/types. h>#inelude <unistd. h int main()int shmid;/定义共享内存idchar *ptr;char

34、*shm_str = "string in a share memory;shmid 二 shmget (0x90, 1024, shm_w| shm_r | ipc_creat | ipc_excl); 创建 共享内存if (-l=shmid)perror(/zcreate share memory");/通过共享内存id获得共享内ptr = (char*)shmat(shmid, 0, 0); 存地址if (void*)-1 二二ptr)perror(/zget share memory");strcpy(ptr, shmstr); shmdt(ptr);/把

35、字符串写入共享内存return 0;/ echo_client - gcc -o c echo_clientc itinclude <sys/types. h> ttinclude <sys/socket. h>include <netinet/in.h>#include <arpa/inet. h> ttinclude <unistd. h>#include <stdio. h>#inelude <errno. h> ttdcfinc ehco_port 8080define max_command 5int

36、 main()int sock_fd;struct sockaddr_in serv_addr;char *buffmaxcommand二abc, def, "test", hello, "quit"char tmpbuf100;socklen_t len;int n, i;/* 创建socket */sock_fd 二 socket(af_tnet, sock_stream, 0);if(sock_fd二二t) perror(z,create socket error!,z);return 0; else pri ntf ("success

37、to create socket %dn,z, sock_fd);/*设置server地址结构*/bzero (&serv addr, si zeof(serv addr); 用的内存serv_addrsin_family = af_1net;型/初始化结构占/设置地址传输层类serv addr. sin port 二 htons (ehco port);serv addr. sin addr. s_addr 二 htons(tnaddr any);/设置监听端口/设置服务器地bzero(&(serv_addr sin_zero), 8);/*连接到服务端*/if (-1二二c

38、onnect(sockfd, (struct sockaddr*)&servaddr, sizcof(scrv_addr) perror ("connect() error!n);close (sock fd);return 0;printf ("success cormcct to server! n,z);/*发送并接收缓冲的数据*/for (i=0;i<max_c0mmand;i+) send(sock_fd, buff i, 100, 0);服务端n 二 recv(sock_fd, tmp_buf, 100, 0);收数据tmp_buf n二0'

39、; ;/给字符串添加结束标志printfczdata send: %s receive: %sn,buffi, 打印字符串/发送数据给/从服务端接tmp buf) ;/if (0=strncmp(tmp_buf, "quit", 4) 退岀命令/判断是否是break;close(sock fd);/关闭套接字return 0;/ echo_serv. c 一 gcc -o s echo_serv. c #include <sys/typesh>ftinclude sys/socket.h> #include <netinet/in. h> #i

40、nelude <arpa/inet.h> #include unistd.h> #inelude <stdio.h> sinclude <errno. h> ttdefine ehc0_p0rt 8080ttdefine max_cltent_num 10 int main()int sock_fd;struct sockaddr_in serv_addr; int clicntfd;struct sockaddr_in clientadd; char buff101;socklen_t len;int closing 二0;int n;/* 创建so

41、cket */ sock_fd 二 socket(af_inet, sock_stream, 0);if(sock_fd=-l) perror (,zcrcatc socket error!,z);return 0; else printf("success to create socket %dsock_fd);/*设置server地址结构*/初始化结构占/设置地址传输层类/设置监听端口bzero(&serv_addr, sizeof(serv_addr); 用的内存serv addr. sinfamily 二 af tnet;型 一一"serv_addr. si

42、n_port = htons (ehc0_p0rt);serv_addr. sin_addr. s_addr = htons (inaddr any) ;/ 设置服务器地bzero (&(serv_addr. sin_zero), 8);/*把地址和套接字绑定*/if (bind (sock fd, (struct sockaddr*)&serv_addr, sizeof(serv_addr)!= 0)printf(bind address fail! %dn,errno);close(sock_fd);return 0; else printf ("success

43、to bind address!n,z);/*设置套接字监听*/if(listen(sock_fd ,max_client_num) !二 0) perror(listen socket error!n);close (sock_fd);return 0; else printf("success to listenn);/*创建新连接对应的套接字*/len = sizeof (clientadd);clientfd 二 accept(sock_fd, (struct sockaddr*)&clientadd, &len); if (clientfd<=0) p

44、error ("accept() error!n); close (sock_fd);return 0;/*接收用户发來的数据*/ while(n = reev(clientfd, buff, 100, 0 ) > 0) buffn =,0, ; /给字符串加入结束符/打印字符串七printf("number of receive bytes 二 %d data 二 %sn, buff); fflush(stdout);send(clientfd, buff, n, 0) ;/发送字符串内容给客户端if(strncmp(buff, "quit",

45、4) = 0)/ 判断是否是退出命令break;closc(clicntfd) ;/关闭新建的连接close(sock_fd) ;/关闭服务端监听的socketreturn 0;/ time_client. c - gcc -o c time_client. c ttinclude <sys/types. h>include <sys/socket. h>tfinclude <netinet/in.h> #include <arpa/inet. h> #inelude <unistd.h> include <stdio.h>

46、; #inelude <crrno.h>define time_port 9090 #define data_size 256int mairioint sockfd; struct sockaddr_in serv; int servlen, n;char buffdata_size;sock_fd = socket (af_inet, sock_dgram, 0); if (sock_fd<=0) /创建套接字perror(create socket error!"); return 0;perror(/zcreate socket");/*设置服务端

47、ip和端口 */ scrv. sin_feiniily=af_inet; serv.sin_port=htons(t1me_port); serv.sin addr. s_addr=inaddr_any; servlen 二sizeof(serv);/监听端口/本机ip/*请求时间*/strcpy(buff, "time");if (t 二二 send to (sockfd, buff, sizeof (buff), servlen) /发送请求perror ("send data,z);close(sock_fd);0, (struet sockaddr*)&a

48、mp;serv,return 0;printf(send time requestn);n 二 reevfrom(sock_fd, buff, sizeof (buff), &servlen) ;/接收返回0, (struet sockaddr*)&serv,if (n<=0) perror (/zrecv data!n); close (sock fd);return 0;buff n二'0,;printf(time from server: %s, buff);/*退出连接*/strcpy(buff, "quit");if (-l=send

49、to(sock fd, buff, sizeof (buff), 0, (struct sockaddr*)&serv, servlen) pcrror (,zscnd data/z);close(sock_fd);return 0;printf(send quit commandn);close (sock_fd); return 0;/ time_serv. c - gcc -o s time_serv. c itinclude <sys/types. h> ttinclude <sys/socket. h>include <netinet/in.h&

50、gt;#include <arpa/inet. h> ttinclude <unistd. h>#include <stdio.h>#inelude <errno. h>#inelude <time. h>define t1me_port 9090define data_size 256int main()int sock_fd;struct sockaddrin local;struct sockaddr_in from;int fromlen, n;char buffdata_size;time_t cur_time;/建立套接字

51、sock_fd 二 socket(af_inet, sock_dgram, 0); if (sock fd<=0) perror(''create socket error!,z); return 0;perror(z/create socket");/*设置要绑定的ip和端口 */loca1. sin_family=af_inet;local. sin_port=htons(time port) ;/ 监听端口local, sin addr. s_addr=tnaddr_any;/本机/*绑定本机到套接字*/if (0!=bind(sock fd, (stru

52、ct sockaddr*)&1ocnl, sizeof(locnl) perror (/zbind socket error!/z);close(sock_fd);rctunn 0;printf(''bind socket");fromlen 二sizeof(from);printf (,zwaiting request from clicnt n);while 仃)n 二 reevfrom(sock_fd, buff, sizeof (buff), 0, (struct sockaddr*)&from, &fromlcn) ; /接收数据if

53、 (n<=0) perror(z/recv data!n/z);close(sock_fd);return 0; buffn= 0' ;/设置字符串结束符printf (,zclient request: %sn", buff); 的字符串/打卬接收到if (0=strncmp(buff, "quit", 4) break;/判断是否退出if (0strncmp(buff, "time", 4) 吋间cur_timc = time(mull);/判断是否请求strepy (buff, asetime (gmtime(&cu

54、r_time); 间字符串sendto(sock_fd, buff, sizeof (buff), 0, (struct sockaddr*)&from, fromlen) ;/ 发送吋间给客户端/生成当前时/关闭套接字 close(sockfd); rcturn 0;/* at_test c - gcc o #inelude <stdio. h> ttinclude <stdlib. h> ttinclude <unistd h> ttinclude <sys/typesh> #include <sys/stat. h> include <fcntl. h> ttincludetermios h> ttinclude <errno. h> at_test at_test c */*标准输入输出定义*/ /*标准函数库定义*/ /*unix标准函数定义*/*文件控制定义*/ /*ppsix终端控制定义*/*错误号定义*/ttin

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论