【C/C++】多进程:僵尸进程

  一个僵尸进程产生的过程是:父进程调用fork创建子进程后,子进程运行至其终止。进程终止后有些信息对于父进程和内核还是很有用的,例如进程的ID号、进程的退出状态、进程运行的CPU时间等。因此进程运行终止后,系统会回收所有内核分配给它的内存、关闭它所打开的文件等,但是还会保留以上极少的信息,以供父进程使用,系统会向父进程发送SIGCHLD信号,父进程应及时调用wait函数来为子进程收尸,做一些收尾工作。但如果父进程没有及时调用wait函数,则子进程的进程状态变成ZOMBIE,即僵尸进程僵尸进程会一起占用内存且无法通过使用kill杀死清除,除非父进程随后调用wait函数或父进程也运行结束或其它因素父进程被杀终结等,僵尸进程才会被回收。

阅读全文

【C/C++】多进程:父进程监听子进程状态 wait()的使用

文章结构:

阅读全文

【C/C++】多进程:子进程的创建fork()

文章结构:

阅读全文

【C/C++】获取系统信息:uname

获取当前Linux/Mac的系统信息可以通过函数uname来实现。

#include <sys/utsname.h>
int uname(struct utsname *name);

#define    _SYS_NAMELEN    256

阅读全文

【C/C++】exec函数族的使用

文章结构:

阅读全文

【C/C++】不定参数函数

文章结构:

阅读全文

【C/C++】共用体Union

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
/*
* UnionLab.cpp
*
* Created on: Nov 29, 2014
* Author: sodino
*/

#include <iostream>

using namespace std;


/**
* “共用体”是一种特殊的类,在一个“共用体”内可以定义多种不同的数据类型。
* 一个被声明为该“共用体”类型的变量中,允许装入该“共用体”所定义的任何一种类型的数据,
* 这些不同类型的数据共享同一段内存,达到节省空间的目的(还有一个节省空间的类型:位域)。
* 另外,同struct一样,联合默认访问权限也是公有的,并且,也具有成员函数。
*
* 在一般的数据结构中各成员有各自的内存空间,一个结构变量的总长度是各成员长度之和(空结构除外,同时不考虑边界调整)。
* 而在“共用体”中,各成员共享一段内存空间!
* 所以一个联合变量的长度等于其成员中最长的那个成员的长度。
* 可对"共用体"变量的任一成员赋予新值,但每次只能对某一成员赋值,其它成员的值也随着内存空间的共用而有了新值。
*
* 本示例代码输出结果:<br/>
* uData.sChar.first=A uData.sChar.second=B
* uData.i=0x6261
* */
int main() {
union UnionData { /*定义一个 共用体*/
int num;
struct { /*在 共用体 中定义一个结构*/
char first;
char second;
} sChar;
} uData;

//共用体 成员赋值
// 赋值给num 0x4241,由于共用内存,也相当对first赋值0x41,second赋值0x42
// 由ascii码表得:first='A' second='B'
uData.num=0x4241;
cout << "uData.sChar.first="<< uData.sChar.first << " uData.sChar.second=" << uData.sChar.second << endl;

// 上面步骤的逆过程
uData.sChar.first='a'; /*联合中结构成员赋值*/
uData.sChar.second='b';
cout << "uData.num=0x" << hex << uData.num << endl;

return 0;
}

阅读全文

【C/C++】内存分配与释放(malloc、calloc、realloc、free)

本文结构

阅读全文

【C/C++】时间精确到微秒、纳秒

在之前的文章【C/C++】日常时间的获取、格式化等操作汇总中讲到的时间都是以秒为精度的。有时候需要确定某个事件的准确时间,就得把精度提高到毫秒(millsecond)、微秒(microsecond)、纳秒(nanosecond,很少用)。这里将讲解并演示如何使用。

阅读全文

【Linux】CPU时间与处理器耗时

文章结构:

阅读全文

【Linux】Time Basics

查看man时,发现有的地方是CPU Time有的地方是Processor Time,想区分下,就发现了如下极度蛋疼的不同的时间称呼,原文链接为Time Basics:The GNU C Library。为保留原滋原味的蛋疼体验,下面大部分内容仍保留英文原版内容不做翻译:

阅读全文

【C/C++】error - called object type 'char *' is not a function or function pointer

碰到过一个问题,代码如下:

1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
#include <stdlib.h>
#include <time.h>


int main (int argc, char ** argv) {
time_t now = time(NULL);
char * ctime = ctime(&now);
printf("%s \n", ctime);
return 0;
}

阅读全文

【C/C++】日常时间的获取、格式化等操作汇总

文章结构如下:

阅读全文

【C/C++】宏(macro)定义与使用

文章结构如下:

阅读全文

【C/C++】文件夹的打开、遍历、删除、创建、关闭操作汇总

本文内容如下:

阅读全文

【C/C++】文件创建、打开、读、写、复制、关闭、删除等操作汇总

本文讲述Linux C 中对文件的操作。分为以下几部分内容:

  1. 打开方式 (包含 创建 能力)
  2. 读、写操作

    读、写单个字符
    读、写字符串
    格式化读、写操作

阅读全文

【C/C++】判断File是文件(夹)、获取文件大小、uid,gid分组、硬链接数

主要用到的函数为stat(),如下:
#include <sys/stat.h>

int stat(const char *pathname, struct stat *buf);
int lstat(const char *pathname, struct stat *buf);
int fstat(int fd, struct stat *buf);

阅读全文

【Linux】文件链接:Hard Link and Symblic Link

Linux文件链接分两种

  • 硬链接(Hard Link)
  • 符号链接(Symbolic Link):相当于Windows下的快捷方式。

阅读全文

【C/C++】access()判断文件是否存在

#include <unistd.h>
int access(const char \*pathname, int mode);
pathname:指定要检查的文件路径;支持相对路径(以执行程序所在目录为当前目录)。
mode:名称、值及描述见下表。

阅读全文

【C/C++】使用getchar()实现gets()功能

#include <stdio.h>

int getchar(void);
从标准输入流中(控制台或命令行终端)获取一个输入的字符。
char *gets(char *s);
从标准输入流中(控制台或命令行终端)获取一串输入的字符直至换行符 \n,但返回内容不包括\n

阅读全文

【Mac】Mac超好用技巧

XCode开发c时各种头文件的存放路径

/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/include
xcode.c.header

阅读全文

【C/C++】string操作方法汇总

本文提供【C/C++】string操作方法汇总如下:

  • 判断内容是否相同
  • 字符串复制
  • 字符串拼接

阅读全文

【C/C++】printf()函数用法汇总

汇总一下printf()的相关用法,并给出示例。
详情参见:printf(3)
使用printf()必须include <stdio.h>
printf()的功能主要是按格式化要求在终端控制台中打印出相应的字符。其返回值int表明当前执行的printf()总共打印出多少字符。当printf执行出错时,返回的结果是个负数。

阅读全文

【C/C++】获取函数运行异常的错误信息(errno、perror()、strerror()) & 'implicitly declaring library function'

C/C++函数运行有可能会导致错误,我们需要进一步知道错误原因才能有的放矢解决。
C/C++中有两种方式可以获知运行异常时的错误信息:

1
2
3
4
5
6
7
8
#include <stdio.h>
perror(char *)
```

```text
#include <errno.h>
#include <string.h>
errno + strerror(int)

阅读全文

【NDK】execlp命令打开浏览器访问指定网页

本文章将演示如何使用NDK编译生成可执行程序启动Android手机浏览器并打开指定网页。

目录结构:

[D]—-jni
[f]——–exec.c
[f]——–Android.mk

阅读全文