c语言wfatal错误,知识点记录, 持续更新中

1,查看当前进程打开了哪些文件    lsof  -c a.out,查看端口对应相应进程(两种方法): lsof -i:50000/netstat -tunlp | grep 50000,根据进程id查看进程占用端口

netstat -nap | grep pid

2, 查看当前目录下c文件的行数 find . -name "*.c" | xargs wc -l

3, pidof a.out 查看a.out的进程号或者pgrep a.out

4,strace 命令很强大,可以跟踪系统调用

5,进程映像中的bss(block storage start / better save space)段:未初始化的全局c变量和静态局部变量,为了效率考虑,并且不占空间。

6, fputs()函数写文件的时候,模式要用r+类似,不能用rw。

7,vim添加行号,修改/etc/vim/vimrc即可

8,fork()函数会继承当前进程的环境变量,exec函数族,只会取代当前进程的正文段,数据段,堆段,栈段,然后如果不是特定指定,则一般是会复制当前进程的environ的。

9,netstat -anp | grep 8888 查看端口是否被占用

10,ls -lt / ls -lrt 查看文件按时间顺序排序

11,pstree -p |grep a.out 可以查看这个进程的树状结构(可以观察当前父进程,子进程之间关系)

12,awk -F = '{print $2}' awk.txt  以=做分隔符(不指定默认用空格),打印awk.txt每行的第二个字段

awk -f "[=|]" '{print $2}' awk.txt 此种写法以=或|为分隔符

13,使用curl发送GET请求:curl protocol://address:port/url?args

使用curl发送POST请求:curl -d "args" protocol://address:port/url

14,在shell脚本中启动一个后台进程,退出终端后,进程不会被杀死,效果等同于nohup,因为这样可以脱离终端,

所以收不到HUP信号啦

15 kill 进程号,killall 进程名,pkill 进程名

ps -ef | grep -v grep | grep $var | grep -w $2| awk '{print $2}' | xargs kill -9  其中-w参数表示完全匹配

查看进程已经运行的时间 ps -p 2342 -o lstart,etime

15 ,查看cpu个数,cat /proc/cpuinfo| grep "processor"| wc -l

还有一种方法,top命令之后直接按1

查看操作系统位数:uname -a

16 scp wjy@192.168.1.12:/home/wjy/test.c ./ 从远程到本地 如果是文件夹加上-r参数即可

scp ./wjy.txt wjy@192.168.1.12   从本地上传到远程

17 :%s/old_word/new_word/g  vim下全局替换

18:grep -r "key" ./ 查找目录下是否有文本包含这个key

19: shellPath=$(cd $(dirname $0) && pwd)  得到当前路径。首先进入到当前目录,然后执行pwd就会返回当前绝对路径

20:打包当前路径下所有文件命令 tar -zcvf oracle.tar.gz ./* ,解压缩tar -xvf ./oracle.tar.gz

21:fread(dst,10,2,pFile);从pFile中读取文件到dst中,读二次,每次读十个字节,一般用法都是读一次。

22.int a,memset(&a,1,4);//解释:将&a地址开始的四个字节填空为1,是按字节填充,所以a的值用2进制表示的话,

应该是这样:1 00000001 00000001 00000001,如果是memset(&a,2,4);则为10 00000010 00000010 00000010

23, cd $ORACLE_HOME,可以直接进去Oracle_Home这个环境变量的目录下

24, wc 1.c 统计行数(-l),单词数(-m),字节数(-c)

25, ls -l 第二列是文件的硬链接个数,之前没注意

26:cat /proc/version 查看操作系统是什么,lsb_release -a 查看具体发行版信息,more /etc/redhat-release也可以

27:结构体里面有c++关于类的东西(string)等,千万不能图省事用memset去整体初始化,会破坏它的内存控制结构

28:查看当前电脑所有tcp状态: netstat -an|awk '/tcp/ {print $6}'|sort|uniq -c

29:一个抓包示例命令:sudo -S tcpdump -vv -s 2048 -i enp2s0 -C 500 host 192.168.1.226 and port 50000  -w ./Dump

30:ctrl + u 删除从开头到光标处位置的命令文本,ctrl + k删除从光标位置开始到结尾处的命令

31:连续执行两条命令cd /tmp;rm -rf *或者cd /tmp && rm -rf *,用;的话不会理会第一条命令是否成功,都会执行第二条命令,所以建议还是用&&

32:time命令会返回三个值:real tmie总时间,user time用户态时间,sys time内核时间

33:LIBRARY_PATH       - 链接时查找静态库/共享库的路径,LD_LIBRARY_PATH  - 运行时查找共享库的路径

链接静态库是将库中的被调用代码复制到调用模块中,而链接共享库则只是在调用模块中,嵌入被调用代码在库中的(相对)地址。

34:c++ stl set的insert方法原型

pairinsert (const value_type& val);

for (int i=1; i<=5; ++i) myset.insert(i*10);    // set: 10 20 30 40 50

ret = myset.insert(20);               // no new element inserted

if (ret.second==false) it=ret.first;  // "it" now points to element 20

35:typedef  返回类型(*新类型)(参数表)

typedef int ( * MYFUNCTION )( int,int ); 这种用法一般是在定义函数指针 MYFUNCTION 是一个函数指针类型 有两个整型的参数,返回一个整型。注意要是返回值是指针,返回值需要加括号.

36:发送多播数据报不必为此加入多播组,但是接收进程必须加入相应多播组并绑定相应端口,目的地为相同多播组不同端口的一个

数据包,ip层会接收并传递给udp层,不过udp层将丢弃它(端口不存在的话),多播肯定用的是udp传输

37:ps -ef | head -n 10只看前十条记录,head 从开始算查看几行,head -n 10 1.c,tail是从末尾,tail -f 1.c还可以持续检测文件是否发生了变化.

38:ifconfig eth0 192.168.10.22,ifconfig eth0 netmast 255.255.255.0,route add default gw 192.168.10.1 dev eth0

39:获取系统开机到现在的时间:sysinfo,clock_gettimer函数都可以,可以通过这个思路做一个定时器.

40:const 语法虽然变化多端,但是并不高深莫测,如果关键字const出现在星号左边,表示被指物是常量,如果出现在星号右边,

表示指针自身是常量,如果出现在星号两边,表示被指物和指针两者都是常量.

41:c语言中的rand()函数中,肯定是通过某些公式生成了伪随机数,假设是线性同余法,就需要提前设定ri,a,b,c的数值,为此需要使用srand(time(NULL))来设置随机数的种子,因为当前时间都是变化的。

当然目前已经推荐使用random/srandom

42:程序运行时,cpu会从内存中把指令和数据读出,然后将其存储在cpu内部的寄存器中进行处理。

43:设置套接字非阻塞除了用fcntl之外还可以用ioctl的FIONBIO选项设置,此外ioctl还有很多其他功能,比如获取本地ip地址等。

44:chmod –R 777 * :

参数-R : 对目前目录下的所有档案与子目录进行相同的权限变更(即以递回的方式逐个变更)

*:通配符,指当前目录下的所有文件及目录

将当前目录下的所有文件及子目录的文件拥有者权限设置为读、写、可执行,文件拥有者所在的用户组成员具备读、写、可执行权限,其它用户也具备读、写、可执行权限

45:ctrl + q解决xshell ctrl+s假死的情况,ctrl + ]退出telnet

46: make -j  10 -j选项可以加快编译速度

47:gcc -D 编译时指定宏,gcc -D WANG 1.c

48:#ifdef FUNC 与 #if defined(FUNC)相同

49 man 7 signal可以查看各种信号

50 stat  1.c可以查看文件链接数,也可以ls -l第二列代表了链接数

51 有时候我们编译一个大的项目的时候,会出现很多错误使得屏幕堆满了很多无用的信息。一般情况下我们需要找到首次出现错误的地方,在gcc中添加编译选项可以使编译停止在第一次出现错误的地方:-Wfatal-errors,    ex:gcc -Wfatal-errors foo.c

52 枚举变量是全局变量的情况下, 枚举值的缺省值是0,不是枚举的第一个值。 其他情况,其值是不定的,而且不限定于所列出的枚举值。

enum string{

x1,

x2,

x3=10,

x4,

x5,

} x;

这个x是全局的,就是0

53: string与vector的互相转换。

string->vector: m_vec = vector(str.c_str(),str.c_str()+str.size());

vector->string:str.insert(str.begin(),m_vec.begin(),m_vec.end())

54:when initialized here出现这种类似的警告是因为初始化表的顺序与变量声明顺序不一致导致

55:tasklist /m *.dll查找某个dll被哪些进程所调用

56:window 10下进去详细信息之后可以结束进程树。查找一个程序32位或者64位直接在任务管理器查看进程列信息,32位的后面直接有标志(32bit)。

57:sudo passwd直接设置root密码

58: arch命令查看计算机的体系架构:i686 是32位,x86_64是64位

59:gcc -E -dM -

如果是#define __STDC_VERSION__ 199901L,则默认支持的是c99标准;如果是#define __STDC_VERSION__ 201112L,则默认支持的c11标准;

60:file filename/a.out 查看a.out或者filename的详细信息

61: du -sh 查看当前文件夹大小,df -h查看文件系统使用情况

62:linux中 strings 命令打印文件中一切可打印的字符

63:strace -e trace=file cat /dev/null 跟踪系统调用中与文件相关的

64:log4cxx库报std::_cxx11 undefined的错误,这是由于系统gcc版本过高(按照c++11标准),但是Log4cxx的库是c++98标准,所以定义_GLIBCXX_USE_CXX11_ABI = 0不用c++11标准即可。

65:有时候qt默认按照c++ 11标准编译,导致有的三方库提示不支持c++ 11 complier,可以在qt.pro加上CONFIG -= c++11

66:若出现:libstdc++.so.6: version `GLIBCXX_3.4.20' not found 。可以用strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX    查GLIBC的版本看。

67:/proc/sys/net/ipv4/ip_local_port_range 这个配置应该是限制本地套接字主动发起连接可用的端口,

如果你的机器是一台网络服务器,建议可以修改这个值的范围,让你本地服务器监听的端口在这个range之外

68:看两个c语言神兽 char* strdup(const char* s);

the strdup function returns a pointer to a new string which is a duplicate of string s.

memory for the new string is obtained with malloc,and can be freed with free.

int asprintf(...)

The functions asprintf() and vasprintf() are analogs of sprintf(3)

and vsprintf(3), except that they allocate a string large enough to

hold the output including the terminating null byte ('\0'), and

return a pointer to it via the first argument.  This pointer should

be passed to free(3) to release the allocated storage when it is no

longer needed.

69:find_first_of

Searches the string for the first character that matches any of the characters specified in its arguments.

When pos is specified, the search only includes characters at or after position pos, ignoring any possible occurrences before pos.

Notice that it is enough for one single character of the sequence to match (not all of them). See string::find for a function that matches entire sequences.

其实就是匹配上查找的任意一个字符就返回。跟find不一样,要注意

70:GNU Profile工具,linux性能工具,性能出问题可以用一下。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值