linux操作系统下c语言编程入门.ppt
《linux操作系统下c语言编程入门.ppt》由会员分享,可在线阅读,更多相关《linux操作系统下c语言编程入门.ppt(37页珍藏版)》请在三一办公上搜索。
1、Linux操作系统下C语言编程入门,CNT,Linux操作系统简介基础知识进程介绍文件操作时间概念消息管理线程操作网络编程Linux下C开发工具介绍,一.Linux操作系统简介,发展历史 1969年,Ken Thompson,UNIXMINIX 1991年,芬兰赫尔辛基大学 LINUS现状和前景 大型计算机系统、PC、手持电脑主要特点 多用户、多任务、稳定性、安全性、开放性、网络功能应用领域 Internet(WEB、FTP、邮件、DNS服务器,TCP/IP路由、防火墙)、LAN、嵌入式系统、办公桌面发行版本 RedHat、Debian、红旗,二.基础知识,源程序的编译gcc 编译器g+编译器
2、例:gcc-o hello hello.c g+-g-o hello.o hello.cpp编写makefile文件对某个Project编译时,需要编写makefile文件。一般的格式是:Target:components(依赖关系)TAB rule(规则)makefile 有三个非常有用的变量,分别是:$、$、$代表目标文件$代表所有的依赖文件$代表第一个依赖文件的名称,Makefile实例:#This is the makefileCC=g+CFLAG=-Wall-OplcMain:src/main.cpp obj/com.o obj/msgware.o obj/process.o obj
3、/rtu.o obj/lmasrtu.o obj/schedule.o obj/rs232.o obj/linkcheck.o obj/msgqueue.o obj/ping.o obj/pid.o obj/paramfile.o$(CC)$(CFLAG)-lpthread-o$src/main.cpp obj/com.o obj/msgware.o obj/process.o obj/rtu.o obj/lmasrtu.o obj/schedule.o obj/rs232.o obj/linkcheck.o obj/msgqueue.o obj/ping.o obj/pid.o obj/pa
4、ramfile.oobj/com.o:src/Communication.cpp$(CC)$(CFLAG)-c-o$obj/msgware.o:src/MsgWare.cpp$(CC)$(CFLAG)-c-o$clean:rm-fr*.o,程序的调试打印调试GDB调试头文件和系统求助man例:man write man 2 write“2”表示我们用的write函数是系统调用函数“3”表示函数是C的库函数,三.进程介绍,进程的概念程序和进程程序是一个包含可以执行代码的文件,是一个静态的文件;而进程是一个开始执行但是还没有结束的程序的实例,就是可执行文件的具体实现。当程序被系统调用到内存以后,系
5、统会给程序分配一定的资源(内存、设备等等),然后进行一系列的复杂操作,使程序变成进程以供系统调用。进程的状态新建、运行、阻塞、就绪和完成,进程的标志为了区分各个不同的进程,系统给每一个进程分配了一个ID。系统调用getpid函数可以得到进程的ID,而调用getppid函数可以得到父进程(创建调用该函数进程的进程)的ID。getuid可以得到进程所有者的ID,getgid可以得到组ID。进程的创建调用fork函数就可以创建一个进程的系统调用。pid_t fork();,四.文件操作,文件的创建和读写int open(const char*pathname,int flags);int open(
6、const char*pathname,int flags,mode_t mode);open函数有两个形式。其中pathname是我们要打开的文件名(包含路径名称,缺省是认为在当前路径下面);flags 可以是下面的一个值或者是几个值的组合:O_RDONLY、O_WRONLY、O_RDWR、O_CREAT、O_APPEND(追加)、O_TRUNC(如果文件已经存在,则删除文件的内容)、O_NOBLOCK(非阻塞方式)*前面三个标志只能使用任意的一个,*如果使用了O_CREATE标志,那么我们可以使用open的第二种形式。还要指定mode 标志,用来表示文件的访问权限。mode 可以是以下情况
7、的组合:-S_IRUSR 用户可以读 S_IWUSR 用户可以写S_IXUSR 用户可以执行 S_IRWXU 用户可以读写执行-S_IRGRP 组可以读 S_IWGRP 组可以写S_IXGRP 组可以执行 S_IRWXG 组可以读写执行-S_IROTH 其他人可以读 S_IWOTH 其他人可以写S_IXOTH其他人可以执行 S_IRWXO 其他人可以读写执行-S_ISUID 设置用户执行ID S_ISGID 设置组的执行ID-例:fd=open(“mnt/mtd/tb.data”,O_RDWR|O_CREAT|O_TRUNC);fd=open(“temp”,O_CREAT,S_IRUSR|S_
8、IWUSR|S_IXUSR|S_IRGRP|S_IWGRP|S_IXGRP|S_IROTH|S_IXOTH);,文件打开以后,我们就可以调用write和read函数对文件进行读写操作了。ssize_t read(int fd,void*buffer,size_t count);ssize_t write(int fd,const void*buffer,size_t count);fd是我们要进行读写操作的文件描述符,buffer是我们要写入文件内容或读出文件内容的内存地址,count是我们要读写的字节数。read 从指定的文件 fd 中读取count字节到buffer 缓冲区中,同时返回co
9、unt。当读到了文件的结尾或者被一个信号所中断,返回值会小于count;如果是由信号中断引起返回,而且没有返回数据,read会返回-1,且设置errno为EINTR;当程序读到了文件结尾的时候,read 会返回0。write 从buffer 中写count字节到文件 fd 中,成功时返回实际所写的字节数。关闭文件时,只要调用close函数就可以了。,while(bytes_read=read(from_fd,buffer,BUFFER_SIZE)if(bytes_read=-1),文件的属性int access(const char*pathname,int mode);判断文件是否可以进行某
10、种操作(读,写等等),mode可以是以下值的组合:R_OK 文件可以读;W_OK 文件可以写;X_OK 文件可以执行;F_OK 文件存在测试成功时,函数返回0;当有一项不符合时,返回-1。要获得文件的其他属性,我们可以使用函数stat 或者fstat。int stat(const char*pathname,struct stat*buf);int fstat(int filedes,struct stat*buf);返回的文件特性保存在类型为stat的结构体中(包含设备、节点、模式、用户ID、组ID、文件字节数、最后一次访问、修改的时间等信息),参数buf指向该结构。在该结构中,我们感兴趣的
11、成员之一是st_mode,它包含了文件类型和文件权限。,目录文件的操作C库函数中提供了getcwd函数,可以得到当前工作路径。char*getcwd(char*buffer,size_t size);Linux下的目录操作函数:int mkdir(const char*path,mode_t mode);/创建目录DIR*opendir(const char*path);/打开目录struct dirent*readdir(DIR*dir);/读取目录int closedir(DIR*dir);/关闭目录,其他函数int unlink(const char*pathname);/删除文件int
12、 rmdir(const char*pathname);/删除目录int remove(const char*pathname);/删除文件或目录int rename(const char*oldname,const char*newname);/文件或目录更名int chmod(const char*filename,mode_t mode);int fchmod(int filedes,mode_t mode);chmod和fchmod用于改变文件的访问权限。成功则返回0,否则返回-1。,五.时间概念,时间表示和测量time_t time(time_t*tloc);返回自1970年1月1日
13、0点以来的秒数char*ctime(const time_t*clock);将秒数转化成字符串,例:Sat Dec 31 10:00:00 2005localtime 取得当地目前的时间和日期mktime 将时间结构数据转换成经过的秒数settimeofday 设置目前的时间gettimeofday 取得目前的时间,可以用作时间的测量,六.消息管理,POSIX 无名信号量用主要是用来保护共享资源,使得资源在一个时刻只为一个进程所拥有。信号灯(semaphore)是进程间共享的资源计数器。int sem_init(sem_t*sem,int pshared,unsigned int value)
14、;int sem_destroy(sem_t*sem);/删除信号灯int sem_wait(sem_t*sem);/阻塞进程,直到信号灯值大于0,返回时自动将信号灯的值减1int sem_post(sem_t*sem);/与sem_wait相反,将信号灯的值加1,同时发出信号唤醒等待的进程int sem_trywait(sem_t*sem);/与sem_wait相似,但不阻塞int sem_getvalue(sem_t*sem);/得到信号灯的值,System V 信号量System V的信号量是信号量集,可以包括多个信号灯,每个操作可以同时操作多个信号灯;POSIX是单个信号灯,POSIX
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- linux 操作系统 语言 编程 入门
链接地址:https://www.31ppt.com/p-5824288.html