Linux编程(C/C++)
文章平均质量分 58
沫俱宏
当你迷茫时,让自己忙起来,慢慢地就会找到自己前进的方向!!!
展开
-
Linux中搜索命令find
在Linux中使用find命令搜索需要的文件或命令: find [path] -name [filename] 如:find /home -name "adb",在指定路径搜索 如:find -name "adb",全盘搜索原创 2015-11-01 21:03:32 · 2140 阅读 · 0 评论 -
Linux下守护进程(daemon)和管道的结合使用(代码保留)
环境:Vmware Workstation;CentOS-6.4-x86_64程序实现的效果:通过管道向管道中写入一个字符串“exit”,使守护进程退出。步骤:1、创建管道并记录所在的完整路径:[negivup@negivup mycode]$ mkfifo fifo[negivup@negivup mycode]$ lsfifo[negivup@negivup原创 2015-09-21 20:33:59 · 663 阅读 · 0 评论 -
Linux下的守护进程(daemon)(代码保留)
环境:Vmware Workstation;CentOS-6.4-x86_64说明:1、一般程序的特点:依赖终端,终端退出,程序也会退出。也就是说,程序的TTY是pts/0,pts/0关闭,程序也会关闭。(ps -u negivup)2、守护进程的特点:不依赖终端,不通过kill,无法关闭进程。创建守护进程的步骤:1、父进程中执行fork后,执行exit退出,使子进原创 2015-09-21 20:32:17 · 703 阅读 · 0 评论 -
Linux下的fork和execve结合使用(代码保留)
环境:Vmware Workstation;CentOS-6.4-x86_64程序说明:通过fork得到两个一模一样的进程,然后在子进程中执行execve函数调用另外一个进程,通过共享的文件描述符读取文件信息。程序书写步骤:1、创建并编写makefile文件:.SUFFIXES:.c .oCC=gccSRCS1=main.cOBJS1=$(SRCS1:.c=.原创 2015-09-21 10:57:52 · 1480 阅读 · 0 评论 -
通过execve实现不同进程间文件描述符的共享
环境:Vmware Workstation;CentOS-6.4-x86_64程序的实现原理:在myexecve中得到文件的描述符,通过execve函数,传递文件的描述符到程序other中,随后通过程序other替换程序myexecve,最后实现不同进程之间完成共享文件描述符的操作。步骤:1、编写makefile文件:.SUFFIXES:.c .oCC=gccS原创 2015-09-21 10:30:24 · 1236 阅读 · 0 评论 -
Linux中的僵死进程(01)---僵死进程的概念
环境:Vmware Workstation;CentOS-6.4-x86_64说明:1、僵死进程:子进程死亡,父进程存在。2、子进程不会被回收,回收的时机是父进程退出;也就是说,僵死进程的子进程,只有父进程退出的时候才会被回收。下面的程序是实现僵死进程的一个例子:#include #include #include #include #include int原创 2015-09-20 18:12:45 · 427 阅读 · 0 评论 -
Linux中fork的使用(04)---wait模型
环境:Vmware Workstation;CentOS-6.4-x86_64wait说明:1、进程一旦调用了wait,就立即阻塞自己。2、wait会收集僵尸进程的信息,并把僵尸进程销毁后返回。3、wait函数的定义形式:pid_t wait(int *status)4、参数status用来保存被收集进程退出时的一些状态,它是一个指向int类型的指针。5、WIFEXIT原创 2015-09-20 17:19:44 · 596 阅读 · 0 评论 -
Linux下执行C语言函数system
环境:Vmware Workstation;CentOS-6.4-x86_64说明:1、system函数的定义形式:int system(const char *command);2、system函数的参数是Linux系统下可以执行的命令。程序如下:#include #include int main(int argc, char *args[]){ // 打开日原创 2015-09-20 14:24:32 · 1605 阅读 · 0 评论 -
getpass()函数:屏幕输入不回显
环境:Vmware Workstation;CentOS-6.4-x86_64说明:读写用户输入,屏幕不回显char *getpass( const char *prompt);getpass用于从键盘读取用户输入,但屏幕不回显。参数prompt为屏幕提示字符。函数返回值为用户键盘输入的字符串。屏幕不回显指的是,用户输入的内容,不会显示任何提示信息,就是在Linux原创 2015-09-20 13:33:14 · 4373 阅读 · 0 评论 -
C中fread()函数返回值特别说明
环境:Vmware Workstation;CentOS-6.4-x86_64fread的定义形式:#include size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);参数说明:void *ptr:指向缓冲区保存或读取的数据size_t size:控制记录的大小,要读取的每个数据项的原创 2015-09-20 08:14:17 · 18307 阅读 · 2 评论 -
Linux系统函数execve说明(03)---execve函数本质分析
环境:Vmware Workstation;CentOS-6.4-x86_64说明:1、execve函数执行的本质是:在程序1中执行execve函数调用程序2,那么程序2就会完全霸占程序1的内存空间,从而实现一个程序调用另一个程序。2、通过execve调用的程序,两个进程的PID是完全一样的。图解说明:程序说明:验证通过execve调用的程序的进程PID相同。步原创 2015-09-21 10:07:51 · 1339 阅读 · 0 评论 -
Linux系统函数execve说明(02)---实现两个程序之间的调用
环境:Vmware Workstation;CentOS-6.4-x86_64说明:自定义两个程序,实现程序之间的调用。要求:1、定义两个源文件main.c和other.c,生成两个可执行文件main和other2、在other中打印参数的信息3、执行程序main调用other步骤:1、创建并编写makefile文件,实现编译生成两个可执行文件:原创 2015-09-21 09:49:31 · 1378 阅读 · 0 评论 -
Linux系统函数execve说明(01)---函数参数说明
环境:Vmware Workstation;CentOS-6.4-x86_64说明:1、execve是Linux的系统函数,查询的时候使用man 2 execve2、execve在头文件unistd.h中。3、execve的定义形式:int execve(const char *filename, char *const argv[], char *const envp[]);原创 2015-09-21 08:27:23 · 6405 阅读 · 1 评论 -
makefile---使用共享库文件so
环境:Vmware Workstation;CentOS-6.4-x86_64说明:1、作用:告诉gcc编译器要在哪里链接,链接那个文件。2、gcc在链接的时候要加-l参数和-L参数3、-l:告诉gcc需要链接指定的共享库文件-l后面跟的共享库文件的名字如:共享库文件的名字如果是libmyso.so,那么在写的时候,就要把前面的lib和后面的.so去掉,得到myso原创 2015-09-21 12:41:32 · 2311 阅读 · 0 评论 -
Linux下so文件的生成和使用
环境:Vmware Workstation;CentOS-6.4-x86_64说明:源文件中不能有main函数;写so文件的时候使用C语言写,不要用C++。程序:创建一个名字为libmyso.so的共享库文件,然后再定义一个程序来调用这个共享库文件。步骤:1、创建生成so文件的makefile:.SUFFIXES:.c .oCC=gccSRCS=原创 2015-09-21 12:48:11 · 2431 阅读 · 0 评论 -
Linux下的共享内存(03)---通过指针访问共享内存中的数据
环境:Vmware Workstation;CentOS-6.4-x86_64说明:1、将共享内存挂载至进程:void *shmat(int shmid, const void *shmaddr,int shmflg);参数shmid是要附加的共享内存区标示符。 总是把参数shmaddr设为0。 参数shmflg可以为SHM_RDONLY,这意味着附加段是只读的。原创 2015-09-21 19:47:05 · 1544 阅读 · 0 评论 -
Linux下的有名管道(06)---使用两个管道实现两个进程之间的通信(手机模式)
环境:Vmware Workstation;CentOS-6.4-x86_64说明:对讲机模式:一个进程输入完成一句话,必须等待第二个进程输入完成一句话之后才能再次输入。步骤:1、创建两个管道:[negivup@negivup mycode]$ mkfifo fifo1[negivup@negivup mycode]$ mkfifo fifo2[negivup@ne原创 2015-09-21 17:22:02 · 1079 阅读 · 0 评论 -
Linux下的有名管道(03)---使用函数创建和删除有名管道
环境:Vmware Workstation;CentOS-6.4-x86_64说明:1、创建管道的时候,使用的函数:int mkfifo(const char *pathname, mode_t mode);2、删除管道的时候,使用的函数:int unlink(const char *path);3、这两个函数的返回值,如果是-1,说明失败。步骤:1、编写makef原创 2015-09-21 15:38:32 · 2905 阅读 · 0 评论 -
C和C++通用的头文件编写形式
环境:Vmware Workstation;CentOS-6.4-x86_64说明:通过c++编译器预定义的一个宏“__cplusplus”,实现C和C++通用的头文件。头文件样式如下:#ifndef __MYHEADER_H__ // 如果没有定义,就执行下面的语句#define __MYHEADER_H__ // 定义宏__MYHEADER_H原创 2015-09-21 12:21:54 · 1016 阅读 · 0 评论 -
Linux下的有名管道(02)---shell操作有名管道
环境:Vmware Workstation;CentOS-6.4-x86_64说明:创建有名管道,并在两个控制台窗口中使用管道进行通信。步骤:1、创建管道,并查看管道信息:[negivup@negivup mycode]$ mkfifo fifo 这是创建管道的命令[negivup@negivup mycode]$ ls -l原创 2015-09-21 15:34:08 · 3893 阅读 · 0 评论 -
Linux下的无名管道
环境:Vmware Workstation;CentOS-6.4-x86_64说明:1、对于一个管道而言,在同一端要么只能读,要么只能写,不可能同时具有读写功能。2、无名管道只能在相关的、有共同祖先的进程间使用(如父子进程,两个不相干的进程之间不能使用无名管道)。3、读写管道与读写普通文件方式一样,调用write与read函数即可。4、int pipe(int pipefd原创 2015-09-21 13:25:15 · 691 阅读 · 0 评论 -
Linux下的共享内存(02)---创建共享内存
环境:Vmware Workstation;CentOS-6.4-x86_64说明:1、创建共享内存使用的函数:int shmget(key_t key, size_t size, int shm-flg);2、参数key既可以是IPC_PRIVATE(0),也可是是ftok函数返回的一个关键字。3、参数size指定段的大小。4、参数flags八进制数,0xxx。转化为原创 2015-09-21 17:52:02 · 1523 阅读 · 0 评论 -
Linux下的有名管道(04)---使用一个管道实现数据的读写
环境:Vmware Workstation;CentOS-6.4-x86_64说明:实现的程序,类似于shell操作有名管道。步骤:1、创建管道fifo1:[negivup@negivup mycode]$ mkfifo fifo1[negivup@negivup mycode]$ lsfifo12、创建并编辑makefile文件:.SUFFIXES:.c原创 2015-09-21 15:59:24 · 789 阅读 · 0 评论 -
makefile---生成共享库文件so
环境:Vmware Workstation;CentOS-6.4-x86_64说明:1、共享库so文件名必须以lib开头,扩展名必须是.so(硬性规定):lib***.so2、编译的时候,gcc必须加-fPIC选项,目的是使gcc产生与位置无关的代码。3、链接的时候,gcc要使用-shared选项,作用是指示生成一个共享库文件。makefile文件的形式如下:.SU原创 2015-09-21 12:38:44 · 5996 阅读 · 2 评论 -
Linux下的有名管道(01)---知识点说明
有名管道(FIFO):有名管道是持久稳定的。有名管道存在于文件系统中。有名管道能让无关联的进程之间交换数据。有名管道和文件操作类似,都是有路径的。shell操作有名管道:创建有名管道:mkfifo[option] name,创建一个名为name的有名管道。读取管道数据:cat,从名为name的有名管道中读取数据。写入管道数据:[command]> nam原创 2015-09-21 13:43:57 · 638 阅读 · 0 评论 -
Linux下的共享内存(01)---查看和释放共享内存
说明:1、查看共享内存,使用命令ipcs:ipcs -m2、删除共享内存,使用命令ipcrm:ipcrm -m [shmid]使用如下:[negivup@negivup mycode]$ ipcs -m 查看共享内存区------ Shared Memory Segments --------key shm原创 2015-09-21 17:50:33 · 9082 阅读 · 0 评论 -
Linux下的有名管道(05)---使用两个管道实现两个进程之间的通信(对讲机模式)
环境:Vmware Workstation;CentOS-6.4-x86_64说明:对讲机模式:一个进程输入完成一句话,必须等待第二个进程输入完成一句话之后才能再次输入。步骤:1、创建两个管道:[negivup@negivup mycode]$ mkfifo fifo1[negivup@negivup mycode]$ mkfifo fifo2[negivup@ne原创 2015-09-21 16:52:00 · 1284 阅读 · 0 评论 -
Linux中的僵死进程(02)---wait回收僵死进程
环境:Vmware Workstation;CentOS-6.4-x86_64这个可以参照前面的博客《Linux中fork的使用(04)---wait模型》需要说明的是:僵死进程一定是子进程消亡,父进程仍然存在的情况。原创 2015-09-20 18:30:50 · 423 阅读 · 0 评论 -
Linux中fork的使用(01)
环境:Vmware Workstation;CentOS-6.4-x86_64fork说明:1、程序中有fork()函数执行,那么就会在内存中创建两个一模一样的进程。2、两个进程除了PID不同之外,其他完全相同。3、对于子进程而言,程序的打印信息,之后执行fork代码之后的内容。4、需要特殊说明的是:除了打印代码,其他的代码是会执行的,比如创建变量等。图解说明:原创 2015-09-20 15:01:41 · 518 阅读 · 0 评论 -
C中fread()函数的建议使用方法
环境:Vmware Workstation;CentOS-6.4-x86_64说明:在使用fread函数的时候,最好使用下面的形式:fread(buf, sizeof(char), sizeof(buf), p);单个字节读取,每次读取缓冲区的长度,这样就不会出现有些字节被舍弃的情况了。程序步骤:1、创建并编写源文件main.c:#include #include原创 2015-09-20 11:03:28 · 29834 阅读 · 2 评论 -
Linux系统函数open和close(04)---open函数错误信息获取
环境:Vmware Workstation;CentOS-6.4-x86_64查看官方文档,open函数返回值的说明:-1 if an error occurred (in which case, errno is set appro-priately)如果返回的是-1,那么errno就会被设置。也就是说,打开文件失败,那么错误信息就会被存放在errno中。说明:原创 2015-09-18 14:56:34 · 11162 阅读 · 0 评论 -
Linux系统函数open和close(03)---open函数的参数
环境:Vmware Workstation;CentOS-6.4-x86_64说明:open函数的定义形式:int open(const char *pathname, int flags);参数说明:1、pathname指的是文件的路径+文件名,路径可以是相对路径,也可以是绝对路径。2、flags指的是打开文件的状态:O_RDONLY、O_WRONLY、O_RDWR、原创 2015-09-18 14:02:25 · 1949 阅读 · 0 评论 -
Linux系统函数write(strlen、sizeof与write结合使用的区别)
环境:Vmware Workstation;CentOS-6.4-x86_64说明:1、write(fd, buf, sizeof(buf));和write(fd, buf, strlen(buf));的区别。2、write(fd, buf, strlen(buf));向文件中写入内容的是,只会把缓冲区中的有效内容全部拷贝到文件中。3、write(fd, buf, sizeof原创 2015-09-19 07:28:13 · 3803 阅读 · 1 评论 -
Linux系统函数write说明
环境:Vmware Workstation;CentOS-6.4-x86_64说明:参数和返回值和read函数相同,具体参照《Linux系统函数read说明》。程序:实现创建文件,并向文件中写入内容。步骤:1、创建并编写源文件main.c:2、创建并编写文件makefile:原创 2015-09-18 17:25:10 · 1365 阅读 · 0 评论 -
Linux中的STDIN_FILENO和STDOUT_FILENO
环境:Vmware Workstation;CentOS-6.4-x86_64说明:STDIN_FILENO:接收键盘的输入STDOUT_FILENO:向屏幕输出程序:接收用户在屏幕上输入的数据,并在屏幕上输出(要求使用read和wirte实现),用户输入quit就退出程序。图解说明:步骤:1、创建并编写源文件main.c:#include原创 2015-09-18 16:17:10 · 35311 阅读 · 0 评论 -
Linux系统函数read说明
环境:Vmware Workstation;CentOS-6.4-x86_64说明:1、read函数的定义形式:ssize_t read(int fd, void *buf, size_t count);2、头文件:#include 3、返回值:成功:返回读取的字节数失败:返回-1并设置errno到达文件末尾:返回04、参数:第一个参数:被操作文原创 2015-09-18 15:25:40 · 1822 阅读 · 0 评论 -
Linux系统函数open和close(02)---open函数的返回值
环境:Vmware Workstation;CentOS-6.4-x86_64小技巧:查询open的帮助文档[negivup@negivup mycode]$ man 2 open说明:open函数的定义形式:int open(const char *pathname, int flags);返回值:1、返回值是一个整数。2、打开文件成功,返回文件描原创 2015-09-18 13:38:54 · 12382 阅读 · 0 评论 -
Linux系统函数open和close(01)
说明:open函数:是Linux的系统函数。close函数:是Linux的系统函数。文件有打开(open)就要有关闭(close),文件的打开和关闭时搭配使用的。环境:Vmware Workstation;CentOS-6.4-x86_64文件操作:有打开,必须有关闭。图解说明:步骤:1、创建并编辑main.c:#include // 包含原创 2015-09-18 13:18:05 · 1591 阅读 · 0 评论 -
Linux的基础文件描述符
环境:Vmware Workstation;CentOS-6.4-x86_64说明:1、Linux下所有内容都是文件,文件都有文件描述符。2、文件描述符:就是打开的文件编号。3、一个进程会默认打开三个文件:标准输入(stdin),标准输出(stdout),标准出错(stderr)。4、默认打开的三个文件,头文件为unistd.h程序:作用:验证进程默认打原创 2015-09-18 11:47:52 · 497 阅读 · 0 评论 -
makefile---单多个源文件,单个可执行文件(C/C++)
makefile作用:将多个源文件编译生成一个可执行文件。环境:Vmware Workstation;CentOS-6.4-x86_64操作图解:说明:a.c,a.h,main.c,makefile在同一个文件夹中。1、创建并编辑a.h,a.h的代码如下:void test();2、创建并编辑a.c,a.c的代码如下:#include "a.h"vo原创 2015-09-18 10:47:50 · 1210 阅读 · 0 评论