Linux programming
文章平均质量分 51
lesliefish
不要停歇、不回头
展开
-
Bash a.out 权限不够 麒麟系统
现象:银河麒麟系统安装后,没有可执行权限,运行bash或者2进制程序都提示bash权限不够或者类似报错原因:系统做了限制,客服公众号回复需要进行下述设定解决:sudo setstatus softmode -p转载 2020-07-09 17:03:24 · 4495 阅读 · 1 评论 -
Linux系统environ环境变量 打印当前进程环境变量信息
在终端通过man 7 environ获取环境变量的相关信息:NAME environ - user environmentSYNOPSIS extern char **environ;DESCRIPTION The variable environ points to an array of pointers to strings ca原创 2016-12-19 14:59:35 · 2939 阅读 · 0 评论 -
stat,lstat,fstat三者的区别
int stat(const char *path, struct stat *buf);int lstat(const char *path, struct stat *buf);int fstat(int filedes, struct stat *buf);转自:http://blog.csdn.net/hnlyyk/article/details/50826712转载 2016-12-16 14:16:08 · 1301 阅读 · 0 评论 -
stat函数及ls功能
stat filename 查看文件信息stat函数#include <sys/types.h>#include <sys/stat.h>#include <unistd.h>int stat(const char *pathname, struct stat *buf);ls -l filename 功能的实现:#include <sys/types.h>#include <sys/sta原创 2016-12-16 14:03:57 · 2334 阅读 · 0 评论 -
线程安全的单例模式 -- 使用pthread_once一次初始化
一次初始化用到的API:pthread_once_t once_control = PTHREAD_ONCE_INIT;int pthread_once(pthread_once_t* once_control, void (*init_routine)(void));有些事需要一次且仅需要一次执行。通常当初始化应用程序时,可以比较容易地将其放在main函数中。但当你写一个库时,就不能在main里面原创 2016-11-19 00:02:41 · 2005 阅读 · 0 评论 -
makefile中的notdir,wildcard和patsubst(附加万能makefile)
转自:http://www.cnblogs.com/pied/archive/2012/11/02/2751476.html1、makefile里的函数makefile里的函数使用,和取变量的值类似,是以一个‘$’开始,然后是一个括号里面是函数名和需要的参数列表,多个变量用逗号隔开,像这样return = $(functionname arg1,arg2,arg3...)。可能这里的’$’更像是从转载 2016-07-14 20:36:32 · 1655 阅读 · 0 评论 -
C++互斥锁与条件变量的封装使用
互斥锁类的封装:#ifndef _MUTEXLOCK_H#define _MUTEXLOCK_H#include <pthread.h>#include <assert.h>class MutexLock{ friend class Condition; //将条件变量设为友元类,访问MutexLock私有成员private: pthread_mutex_t _mutex;原创 2016-06-28 22:09:11 · 2005 阅读 · 0 评论 -
pthread_cond_signal函数的使用[摘自百科]
pthread_cond_signal函数的作用它的作用为 发送一个信号给另外一个正在处于阻塞等待状态的线程,使其脱离阻塞状态,继续执行. 如果没有线程处在阻塞等待状态,pthread_cond_signal也会成功返回。但使用pthread_cond_signal不会有“惊群现象”产生,它最多只给一个线程发信号。 假如有多个线程正在阻塞等待着这个条件变量的话,那么是根据各等待线程优先级的高低原创 2016-06-28 19:17:54 · 2996 阅读 · 0 评论 -
Linux 7个运行级别(runlevel)
转自:http://www.cnblogs.com/dkblog/archive/2011/08/30/2160191.htmlLinux系统有7个运行级别(runlevel)运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动 运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆 运行级别2:多用户状态(没有NFS) 运行级别3:完全的多用户状态(有NFS)转载 2016-03-26 12:43:26 · 1278 阅读 · 0 评论 -
pthread_atfork函数 -- 多线程程序fork时互斥锁的处理
如果一个多线程程序的某个线程调用了fork函数,那么新创建的子进程是否将自动创建和父进程相同数量的线程呢? 答案是不会,子进程只拥有一个执行线程,它是调用fork的那个线程的完整复制。 并且子进程将自动继承父进程中互斥锁的状态。 也就是说,父进程中已经加锁的互斥锁在子进程中也是被锁住的。 这引来的问题:子进程可能不清楚从父进程中继承而来的互斥锁的具体状态(加锁或者解锁状态未知)。 这个互斥原创 2016-04-07 14:20:13 · 2998 阅读 · 0 评论 -
Linux线程 -- 互斥锁实践
Linux线程互斥锁程序示例#include <stdio.h>#include <stdlib.h>#include <pthread.h>#include <unistd.h>#define NUM 5000 int counter = 0;/*静态锁*/pthread_mutex_t c_mutex = PTHREAD_MUTEX_INITIALIZER;/*线程执行函数*/voi原创 2016-02-01 19:36:38 · 438 阅读 · 0 评论 -
进程间传递文件描述符
由于fork调用之后,父进程打开的文件描述符在子进程中仍然保持打开,所以文件描述符可以很方便的从父进程传递到子进程。需要注意的是,传递一个文件描述符并非传递一个文件描述符的值,而是要在接收进程中创建一个新的文件描述符,并且该文件描述符和发送进程中被传递的文件描述符指向内核中相同的文件表项。如何把子进程中打开的文件描述符传递给父进程呢?即如何在两个不相干的进程之间传递文件描述符呢?在Linux下,我们原创 2016-04-06 20:58:50 · 2354 阅读 · 1 评论 -
Linux进程通信 -- 共享内存实战
共享内存原理及实现system V IPC机制下的共享内存本质是一段特殊的内存区域,进程间需要共享的数据被放在该共享内存区域中,所有需要访问该共享区域的进程都要把该共享区域映射到本进程的地址空间中去。 这样一个使用共享内存的进程可以将信息写入该空间,而另一个使用共享内存的进程又可以通过简单的内存读操作获取刚才写入的信息,使得两个不同进程之间进行了一次信息交换,从而实现进程间的通信。 共享内存允许原创 2016-01-27 16:24:34 · 868 阅读 · 0 评论 -
access函数 权限测试
#include int access(const char *pathname, int mode);成功返回0失败返回-1R_OK(可读)、W_OK(可写)、X_OK(可执行)具体示例如下:#include #include #include int main(int argc, char* argv[]){ i原创 2016-12-16 14:39:29 · 766 阅读 · 0 评论 -
gcc -D选项 编译时添加宏定义
程序实例:#include #include int main(int argc, char* argv[]){ #ifdef DEBUG printf("gcc 的-D 选项测试\n");#endif return 0;}直接编译运行不会有任何结果:yu@ubuntu:~/cplusplus/gcc$ gcc debugtest.c -o debugt原创 2016-12-19 10:59:11 · 23996 阅读 · 0 评论 -
Tars框架线程TC_Thread的使用
开源库Tars,本文参考官方示例对封装的线程TC_Thread进行实践。封装类 TestThread头文件:#pragma once#include "../../tars/util/include/util/tc_thread.h"using namespace tars;namespace lesliefishtest{ class TestThread : publ...原创 2019-02-20 23:19:48 · 1045 阅读 · 1 评论 -
Tars框架TC_Mmap类的使用--进程间通信之内存映射
本例定义一个类,创建,写入,读取操作函数,直接上代码吧,具体行为注释写清楚了: class TestMMap { public: /************************************! * @brief // 创建 * @param size_t n 文件长度 * @...原创 2019-02-26 12:58:21 · 364 阅读 · 1 评论 -
vs2017 linux 线程编译执行 Enable multithreading to use std::thread: Operation not permitted问题解决方案
1、在使用到线程的linux程序执行时,出现terminate called after throwing an instance of ‘std::system_error’what(): Enable multithreading to use std::thread: Operation not permitted需要配置命令行 -pthread两个地方:2、编译时错误:...原创 2019-02-20 13:05:53 · 1315 阅读 · 0 评论 -
vs2017 linux zlib解决 undefined reference to `deflateInit2_' 、`deflate' `crc32' `crc32' `deflateEnd'
Tars框架TC_GZip类使用了zlib库,编译的时候,报如下错误tc_gzip.o : error : In function `tars::TC_GZip::compress(char const*, unsigned long, std::vector<char, std::allocator<char> >&)':error : undefined r...原创 2019-02-24 19:23:32 · 9107 阅读 · 0 评论 -
Tars框架解析类TC_Option的使用--linux命令行参数解析
应用程序的带参数运行,如:int main(int argc, char* argv[]){ return 0;} 其中argc是传入参数的个数,argv是一个指向二维数组的指针,传入的是我们命令行中输入的参数,如程序执行命令: yu@ubuntu:~/projects/FishTars/bin/x64/Debug$./a.out aa bb cc这时,argc=3, argv指...原创 2019-02-24 00:17:37 · 962 阅读 · 0 评论 -
Tars框架线程池TC_ThreadPool的使用--执行lambda形式任务task
线程池是我们在开发多线程程序中几乎是必不可少的一部分。今天实践一下Tars框架的线程池TC_ThreadPool,本例采用一个lambda函数作为线程执行的任务,源码如下:#pragma once#include "../../tars/util/include/util/tc_thread_pool.h"#include <iostream>#include <se...原创 2019-02-23 20:57:47 · 929 阅读 · 1 评论 -
Tars框架单例模式TC_Singleton的使用
TC_Singleton可以有选择在静态区域或堆上创建对象,下面用一个实例跑一下:代码如下: // 静态区创建 static class TestCreateStaticObj : public TC_Singleton&lt;TestCreateStaticObj, CreateStatic, PhoneixLifetime&gt; { public: ...原创 2019-02-21 23:41:50 · 691 阅读 · 0 评论 -
wait获取子进程退出状态 WIFEXITED和WIFSIGNALED用法
可以使用wait函数传出参数status来保存进程的退出状态。常用宏函数分为日如下几组: 1、 WIFEXITED(status) 若此值为非0 表明进程正常结束。 若上宏为真,此时可通过WEXITSTATUS(status)获取进程退出状态(exit时参数) 示例: if(WIFEXITED(status)){ printf("退出值为 %d\n",原创 2016-12-20 22:08:24 · 34478 阅读 · 0 评论 -
execl()函数与execlp()函数
转自:http://www.jb51.net/article/71734.htmexecl()函数:执行文件函数头文件:#include定义函数:intexecl(const char * path, const char * arg, ...);函数说明:execl()用来执行参数path字符串所代表的文件路径,接下来的参数代表执行该文件时传递过去的arg转载 2016-12-20 13:58:17 · 29216 阅读 · 0 评论 -
gdb调试 fork程序 设置跟踪
使用gdb调试的时候,gdb只能跟踪一个进程。 可以在fork函数调用之前,通过指令设置gdb调试工具跟踪父进程或子进程。默认情况下gdb是跟踪父进程的。 set follow-fork-mode child命令设置gdb在fork之后跟踪子进程。set follow-fork-mode parent设置跟踪父进程。 注意:一定要在fork函数调用之前设置。原创 2016-12-20 10:45:50 · 9178 阅读 · 0 评论 -
Linux操作环境变量 getenv函数、setenv函数、unsetenv函数使用
1、getenv函数获取环境变量的值man 3 getenv #include char *getenv(const char*name); DESCRIPTION The getenv() function searches the environment list to find theenvironment variable na原创 2016-12-19 15:48:52 · 21774 阅读 · 0 评论 -
git版本控制工具学习笔记
git基本命令git add file 提交文件 git commit -m "what changes" 提交更改信息注释git status 查看修改状态git log 查看日志git log --pretty=oneline 一行显示日志信息git reset --hard HEAD^ 版本回退到上一个版本git reset --hard xxxx(某版本号前几位) 回退到xxxx版本gi原创 2016-02-23 17:09:01 · 502 阅读 · 0 评论 -
Linux系统日志 -- syslog函数
应用程序使用syslog函数与rsyslogd守护进程通信。 syslog函数的定义如下:#include <syslog.h>void syslog(int priority, const char* message, ...);该函数采用可变参数(第二个message和第三个…)结构化输出。 priority参数:设施值与日志级别的按位或。设施值的默认值是LOG_USER。 日志级别有如下原创 2016-03-30 10:33:39 · 2424 阅读 · 0 评论 -
Linux下gcc生成和使用静态库和动态库详解
转自:http://blog.chinaunix.net/uid-23592843-id-223539.html一、基本概念1.1什么是库在windows平台和linux平台下都大量存在着库。本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。由于windows和linux的平台不同(主要是编译器、汇编器和连接器的不同),因此二者库的二进制是不兼容的。本文仅限于介绍linux下的库转载 2016-01-19 19:56:41 · 464 阅读 · 0 评论 -
初级Makefile实战示例
1.首先准备个main.c、fun.c程序//main.c#include<stdio.h>void main(){ printf("stupid stupid stupid\n"); myfun();}//fun.c#include <stdio.h>int myfun();int myfun(){ printf("myfun is called!\n");原创 2016-01-20 22:39:25 · 533 阅读 · 0 评论 -
core dump 初级实战
core dump在Linux环境下写C,有的程序gcc编译未出现问题, 运行时却会出现Segment fault(段错误)。 这通常都是指针错误引起的,通过gdb一步一步调试在大型程序下是不可取的。利用core file快速锁定问题基本步骤:1、检查是否允许core文件及大小ulimit –c若为0 则执行ulimit -c unlimited取消限制若为unlimited,则无需设置2、制作原创 2016-01-21 00:16:11 · 414 阅读 · 0 评论 -
apue.h 源码
#ifndef _APUE_H #define _APUE_H #define _XOPEN_SOURCE 600 /* Single UNIX Specification, Version 3 */ #include <sys/types.h> /* some systems still require this */ #include <sys/stat.h>原创 2016-01-24 21:59:35 · 503 阅读 · 0 评论 -
Linux进程学习笔记(一)
进程是一个程序一次执行的过程,是一个运行着的程序,包含了进程的动态创建、调度和消亡的过程,是Linux的基本调度单位。进程标识OS会为每个进程分配一个唯一的整型ID,做为进程的标识号(pid)。 进程除了自身的ID外,还有父进程ID(ppid),所有进程的祖先进程是同一个进程,它叫做init进程,ID为1,init进程是内核自启后的一个启动的进程。 init进程负责引导系统、启动守护(后台)进程原创 2016-01-25 20:10:58 · 639 阅读 · 0 评论 -
Linux进程学习笔记(二、创建进程)
fork()函数一个现有的进程可以调用fork函数创建一个新进程#include <unistd.h>pid_t fork(void);//返回值:子进程返回0,父进程返回子进程的ID,若出错,返回-1子进程对变量所做的改变不影响父进程中该变量的值,即父进程和子进程并不完全共享存储空间。fork实例:#include <stdio.h>#include <sys/types.h>#include原创 2016-01-25 23:31:28 · 478 阅读 · 0 评论 -
Linux 进程终止5种形式
1、main函数的自然返回,return 2、调用exit函数 3、调用_exit函数 4、调用abort函数 5、接受能导致进程终止的信号: ctrl+c (^C) SIGINT(SIGINT中断进程) SIGQUIT (进程在因收到SIGQUIT退出时会产生core文件, 在这个意义上类似于一个程序错误信号) ctrl + \ (^\Quit)其中1、2、3为原创 2016-01-26 16:58:04 · 3756 阅读 · 0 评论 -
Linux进程间通信—创建守护进程
守护进程守护进程是生存期长的一种进程。 常常在系统引导装入时启动。 它们无控制终端,故称之后台运行。为什么要引入守护进程?由于在linux中,每一个系统与用户进行交流的界面称为终端,每一个从此终端开始运行的进程都会依赖这个终端,这个终端就称为这些进程的控制终端。当控制终端被关闭时,相应的进程都会自动关闭。但是守护进程却能突破这种限制,它被执行开始运转,直到整个系统关闭时才退出。守护进程的特性:原创 2016-01-26 19:03:51 · 1151 阅读 · 0 评论 -
Linux进程间通信—无名管道和命名管道
无名管道(pipe)管道是linux进程间通信的一种方式,如命令ps -ef | grep ntp 无名管道的特点: 1、只能在亲缘关系进程间通信(父子或兄弟) 2、半双工(固定的读端和固定的写端) 3、是特殊的文件,可以用read、write等,只能在内存中管道函数原型: #include <unistd.h> int pipe(int fds[2]);函数pipe用于创建一个无原创 2016-01-26 21:05:14 · 1172 阅读 · 0 评论 -
Linux文件I/O学习笔记 1
1、open函数建立新文件testopen.txt先#include<stdio.h>#include<fcntl.h>#include<sys/types.h>#include<sys/stat.h>#include<unistd.h>int main(int argc, char *argv[]){ int fd; if(argc!=2)原创 2016-01-24 22:45:42 · 434 阅读 · 0 评论 -
Linux文件复制cp命令的实现
Linux命令cp的实现 代码如下:#include <stdio.h>#include <sys/types.h>#include <fcntl.h>#include <stdlib.h>#include <unistd.h>#define SIZE 8192int main(int argc, char *argv[]){ char buf[SIZE]; int fd原创 2016-02-06 11:12:13 · 1395 阅读 · 0 评论 -
WinSCP和PuTTY的安装与配置(Ubuntu ssh)
本安装指南安装前条件win10已装Vmwar虚拟机,ubuntu15.04 ubuntu已安装ssh(联网下)安装ssh命令 sudo apt-get install ssh ssh安装详见:http://blog.csdn.net/y396397735/article/details/50528233 WinSCP5.7.3 PuTTY安装WinSCP步骤1、双击WinSCP安装包开始安装原创 2016-01-16 22:44:40 · 5826 阅读 · 0 评论