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

下载本文档

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

文档简介

1、ARM嵌入式Linux系统开发详解.Linux.c应用程序开发详解源代码#include <stdio.h>int main()printf("Hello World!n");return 0;/ 从文件读写成块数据#include <stdio.h>int main()int buf1024 = 0;int p;FILE *fp = fopen(“./blk_file.dat”, “rb+”);if (NULL=fp)return -1;fwrite(buf, sizeof(int), 1024, fp);/ 把1024个数据块写入文件流fp,每个

2、数据块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("buf%d = %dn", i, bufi);fclose(fp);/ 最后别忘了关闭文件return 0;#include <stdio.h> int m

3、ain()FILE *fp = NULL;/ 定义文件指针char *buf3 = / 定义三个字符串,供写入文件使用 "This is first line!n", "Second Line!n", "OK, the last line!n"char tmp_buf364, *p;/ 定义字符串缓存,供读取文件使用int i;fp = fopen("chap7_demo.dat", "rb+");/ 使用读写方式打开文件,并且把文件长度置0if (NULL=fp) printf("e

4、rror to open file!n"); return -1;/ 把三个字符串写入文件for (i=0;i<3;i+) fputs(bufi, fp);fseek(fp, 0, SEEK_SET);/ 把文件指针设置到文件开头,相当于rewind(fp)/ 从文件读取三个字符串到缓存for (i=0;i<3;i+) p = tmp_bufi; fgets(p, 64, fp); printf("%s", p);/ 打印刚读取出来的字符串到屏幕fclose(fp);/ 别忘记关闭文件return 0;/ c_memory_test.c#include

5、 <stdio.h>#include <stdlib.h>int main() char *p_str1, *p_str2;/ 定义两个char*指针 /* 使用malloc()函数分配内存 */ p_str1 = (char*)malloc(32); if (NULL=p_str1) / 检查内存分配是否成功 printf("Alloc p_str1 memory ERROR!n"); return -1; /* 使用calloc()函数分配内存 */ p_str2 = (char*)calloc(32, sizeof(char); if (NUL

6、L=p_str2) / 检查内存是否分配成功 printf("Alloc p_str2 memory ERROR!n"); free(p_str1);/ 注意,这里需要释放p_str1占用的内存 return -1; strcpy(p_str1, "This is a simple sentence.");/ p_str1写入一个字符串 strcpy(p_str2, p_str1);/ p_str2写入与p_str1相同的字符串 /* 打印p_str1的结果 */ printf("p_str1 by malloc():n"); pri

7、ntf("p_str1 address: 0x%.8xn", p_str1);/ p_str1的内存地址 printf("p_str1: %s(%d chars)n", p_str1, strlen(p_str1);/ p_str1的内容 /* 打印p_str2的结果 */ printf("p_str2 by calloc():n"); printf("p_str2 address: 0x%.8xn", p_str2);/ p_str2的内存地址 printf("p_str2: %s(%d chars)n

8、", p_str2, strlen(p_str2);/ p_str2的内容 /* 为p_str1重新分配内存(减小) */ p_str1 = (char*)realloc(p_str1, 16); if (NULL=p_str1) / 检查内存分配结果 printf("Realloc p_str1 memory ERROR!n"); free(p_str2);/ 注意,需要释放p_str2占用的内存 return -1; p_str115 = '0'/ 写字符串结束符 /* 为p_str2重新分配内存(增大) */ p_str2 = (char*)

9、realloc(p_str2, 128); if (NULL=p_str2) / 检查内存分配结果 printf("Realloc p_str2 memory ERROR!n"); free(p_str1);/ 注意,需要释放p_str1占用的内存 return -1; strcat(p_str2, "The second sentence in extra memory after realloced!"); /* 打印p_str1的结果 */ printf("p_str1 after reallocedn"); printf(&q

10、uot;p_str1 address: 0x%.8xn", p_str1);/ p_str1的内存地址 printf("p_str1: %s(%d chars)n", p_str1, strlen(p_str1);/ p_str1的内容 /* 打印p_str2的结果 */ printf("p_str2 after realloced:n"); printf("p_str2 address: 0x%.8xn", p_str2);/ p_str2的内存地址 printf("p_str2: %s(%d chars)n&q

11、uot;, p_str2, strlen(p_str2);/ p_str2的内容 /* 注意,最后要释放占用的内存 */ free(p_str1);/ 释放p_str1占用的内存 free(p_str2);/ 释放p_str2占用的内存 return 0; /* 注意POSIX操作文件函数使用不同的头文件 */#include <sys/types.h>#include <sys/stat.h>#include <unistd.h>#include <fcntl.h>#include <stdio.h>#include <err

12、no.h>extern int errno;int main()int fd;/ 注意,文件描述符是整型值char buf64 = "this is a posix file!(line1)n"off_t curr_pos;fd = open("./posix.data", O_CREAT|O_RDWR|O_EXCL, S_IRWXU); /打开一个不存在的文件,并创建文件,权限是用户可读写执行if (-1=fd) / 检查文件打开是否成功switch (errno) case EEXIST:/ 文件已存在printf("File exi

13、st!n");break;default:/ 其他错误printf("open file fail!n");break;return 0;write(fd, buf, strlen(buf);/ 把字符串写入文件curr_pos = lseek(fd, 0, SEEK_CUR);/ 取得当前文件偏移量位置printf("File Point at: %dn", curr_pos);lseek(fd, 0, SEEK_SET);/ 把文件偏移量移动到文件开头strcpy(buf, "File Pointer Moved!n")

14、;write(fd, buf, strlen(buf);/ 把新的数据写入文件file_mode = fcntl(fd, F_GETFL);/ 获取文件状态标记if (-1!=file_mode) switch (file_mode&O_ACCMODE) / 检查文件状态case O_RDONLY:printf("file mode is READ ONLYn");break;case O_WRONLY:printf("file mode is WRITE ONLYn");break;case O_RDWR:printf("file m

15、ode is READ & WRITEn");break;close(fd);return 0;/test.cint g_var_a =0;/ 存放在全局已初始化数据区char g_var_b;/ 存放在BSS区(未初始化全局变量)int main()int var_a;/ 存放在栈区char var_str = “string1”;/ 存放在栈区char *p_str1, *p_str2;/ 存放在栈区char *p_str3 = “string2”;/ 存放在已初始化数据区 ptr_str3存放在栈区static int var_b = 100;/ 全局静态数据,存放在已

16、初始化区p_str1 = (char*)malloc(1024);/ 从堆区分配1024字节内存p_str2 = (char*)malloc(2048);/ 从堆区分配2048字节内存free(p_str1);free(p_str2);return 0;/ filename getenv.c 获取环境变量测试#include <stdio.h>#include <stdlib.h> int main() char *env_path = "PATH"/ 打算获取的环境变量名称 char *env_value = NULL;/ 环境变量值 env_va

17、lue = getenv(env_path);/ 使用系统函数获取指定环境变量 if (NULL=env_value)/ 检查是否获取到变量的值 printf("Not found!n"); printf("Get Env PATH:n%s", env_value);/ 输出PATH环境变量的值 return 0;#include <sys/types.h>#include <unistd.h>#include <stdio.h>#include <stdlib.h>int main() pid_t pid

18、; pid = fork();/ 创建进程 if (-1=pid) / 创建进程失败 printf("Error to create new process!n"); return 0; else if (pid=0) / 子进程 printf("Child process!n"); else / 父进程 printf("Parent process! Child process ID: %dn", pid); return 0;/ process_demo.c#include <sys/types.h>#include

19、<sys/stat.h>#include <unistd.h>#include <stdio.h>#include <stdlib.h>int main() pid_t pid, pid_wait; int fd2; char buff64, *cmd = "exit" if (pipe(fd) / 创建管道 perror("Create pipe fail!"); return 0; pid = fork(); if (-1=pid) perror("Create process fail!&q

20、uot;); return 0; else if (0=pid) / 子进程 close(fd1);/ 关闭写操作 printf("wait command from parent!n"); while(1) read(fd0, buff, 64); if (0=strcmp(buff, cmd) printf("recv command ok!n"); close(fd0); exit(0); else / 父进程 printf("Parent process! child process id: %dn", pid); close

21、(fd0);/ 关闭读操作 sleep(2); printf("Send command to child process.n"); write(fd1, cmd, strlen(cmd)+1);/ 写入命令 close(fd1); return 0;#include <sys/types.h>#include <unistd.h>#include <stdio.h>#include <stdlib.h>#include <string.h>int main() int fd2; pid_t pid; char b

22、uf64 = "I'm parent process!n"/ 父进程要写入管道的信息 char line64; if (0!=pipe(fd) / 创建管道并检查结果 fprintf(stderr, "Fail to create pipe!n"); return 0; pid = fork();/ 创建进程 if (pid<0) fprintf(stderr, "Fail to create process!n"); return 0; else if (0=pid) / 父进程 close(fd0);/ 关闭读管道,

23、使得父进程只能向管道写入数据 write(fd1, buf, strlen(buf);/ 写数据到管道 close(fd1);/ 关闭写管道 else / 子进程 close(fd1);/ 关闭写管道,使得子进程只能从管道读取数据 read(fd0, line, 64);/ 从管道读取数据 printf("DATA From Parent: %s", line); close(fd0);/ 关闭读管道 return 0;#include <stdio.h>#include <stdlib.h>#include <unistd.h>void

24、 bye(void)/ 退出时回调的函数 printf("That was all, folksn");void bye1(void)/ 退出时回调的函数 printf("This should called first!n");int main() long a; int i; i = atexit(bye);/ 设置退出回调函数并检查返回结果 if (i != 0) fprintf(stderr, "cannot set exit function byen"); return EXIT_FAILURE; i = atexit(b

25、ye1);/ 设置退出回调函数并检查返回结果 if (i!=0) fprintf(stderr, "cannot set exit function bye1n"); return EXIT_FAILURE; return EXIT_SUCCESS;#include <sys/types.h>#include <unistd.h>#include <stdio.h>#include <stdlib.h>int main() pid_t pid, pid_wait; int status; pid = fork();/ 创建子进

26、程 if (-1=pid) / 检查是否创建成功 printf("Error to create new process!n"); return 0; else if (pid=0) / 子进程 printf("Child process!n"); else / 父进程 printf("Parent process! Child process ID: %dn", pid); pid_wait = waitpid(pid, &status, 0);/ 等待指定进程号的子进程 printf("Child process

27、 %d returned!n", pid_wait); return 0;#include <pthread.h>#include <stdio.h>#include <stdlib.h>void* thread_func(void *arg)/ 线程函数 int *val = arg; printf("Hi, I'm a thread!n"); if (NULL!=arg) / 如果参数不为空,打印参数内容 while(1) printf("argument set: %dn", *val); in

28、t main() pthread_t tid;/ 线程ID int t_arg = 100;/ 给线程传入的参数值 if (pthread_create(&tid, NULL, thread_func, &t_arg)/ 创建线程 perror("Fail to create thread"); sleep(1);/ 睡眠1秒,等待线程执行 printf("Main thread!n"); pthread_cancel(tid);/ 取消线程 return 0;#include <pthread.h> #include <

29、;stdio.h> #include <stdlib.h> void* thread_func(void *arg)/ 线程函数 int *val = arg; printf("Hi, I'm a thread!n"); if (NULL!=arg)/ 如果参数不为空,打印参数内容 printf("argument set: %dn", *val); int main() pthread_t tid;/ 线程ID int t_arg = 100;/ 给线程传入的参数值 if (pthread_create(&tid, N

30、ULL, thread_func, &t_arg)/ 创建线程 perror("Fail to create thread"); sleep(1);/ 睡眠1秒,等待线程执行 printf("Main thread!n"); return 0; / pthread_demo.c #include <pthread.h> #include <unistd.h> #include <stdio.h> #include <stdlib.h> void* mid_thread(void *arg);/ mi

31、d线程声明 void* term_thread(void *arg);/ term线程声明 int main() pthread_t mid_tid, term_tid;/ 存放线程id if (pthread_create(&mid_tid, NULL, mid_thread, NULL) / 创建mid线程 perror("Create mid thread error!"); return 0; if (pthread_create(&term_tid, NULL, term_thread, (void*)&mid_thread) / 创建te

32、rm线程 perror("Create term thread fail!n"); return 0; if (pthread_join(mid_tid, NULL) / 等待mid线程结束 perror("wait mid thread error!"); return 0; if (pthread_join(term_tid, NULL) / 等待term线程结束 perror("wait term thread error!"); return 0; return 0; void* mid_thread(void *arg)/

33、mid线程定义 int times = 0; printf("mid thread created!n"); while(1) / 不断打印等待的次数,间隔2秒 printf("waitting term thread %d times!n", times); sleep(2); times+; void* term_thread(void *arg)/ term线程定义 pthread_t *tid; printf("term thread created!n"); sleep(2); if (NULL!=arg) tid = (p

34、thread_t*)arg; pthread_cancel(*tid);/ 如果线程id合法,结束线程 / shm_read.c -> gcc -o r shm_read.c#include <sys/ipc.h>#include <sys/shm.h>#include <sys/types.h>#include <unistd.h>int main() int shmid;/ 定义共享内存id char *ptr; shmid = shmget(0x90, 1024, SHM_W|SHM_R|IPC_EXCL); / 根据key获得共享内

35、存id if (-1=shmid) perror("create share memory"); ptr = shmat(shmid, 0, 0);/ 通过共享内存id获得共享内存地址 if (void*)-1=ptr) perror("get share memory"); printf("string in share memory: %sn", ptr);/ 打印共享内存中的内容 shmdt(ptr); return 0;/ shm_write.c -> gcc -o w shm_write.c#include <s

36、ys/ipc.h>#include <sys/shm.h>#include <sys/types.h>#include <unistd.h>int main() int shmid; / 定义共享内存id char *ptr; char *shm_str = "string in a share memory" shmid = shmget(0x90, 1024, SHM_W|SHM_R|IPC_CREAT|IPC_EXCL); / 创建共享内存 if (-1=shmid) perror("create share mem

37、ory"); ptr = (char*)shmat(shmid, 0, 0);/ 通过共享内存id获得共享内存地址 if (void*)-1=ptr) perror("get share memory"); strcpy(ptr, shm_str);/ 把字符串写入共享内存 shmdt(ptr); return 0;/ echo_client gcc o c echo_client.c#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#incl

38、ude <arpa/inet.h>#include <unistd.h>#include <stdio.h>#include <errno.h>#define EHCO_PORT 8080#define MAX_COMMAND 5int main() int sock_fd; struct sockaddr_in serv_addr; char *buffMAX_COMMAND = "abc", "def", "test", "hello", "quit" char tmp_buf100; socklen_t len; int n, i; /* 创建socket */ sock_fd = socket(AF_INET, SOCK_STREAM, 0); if(sock_fd=-1) perror("create socket error!"); return 0; else printf("Success to create socket %dn", sock_fd); /* 设置server地址结构 */ bzero(&a

温馨提示

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

评论

0/150

提交评论