![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux + C
zhangqingsup
这个作者很懒,什么都没留下…
展开
-
fcntl设置FD_CLOEXEC标志作用
通过fcntl设置FD_CLOEXEC标志有什么用?close on exec, not on-fork, 意为如果对描述符设置了FD_CLOEXEC,使用execl执行的程序里,此描述符被关闭,不能再使用它,但是在使用fork调用的子进程中,此描述符并不关闭,仍可使用。eg:jamie@jamie-laptop:~$ cat test.c#include #include #include #include int main(void){ int fd,pid; char bu原创 2010-07-07 09:47:00 · 6531 阅读 · 1 评论 -
关于枚举
枚举在C中和整形差不多,是可以自加/自减的,但是赋值的时候不能直接赋整值,另外打印的时候也一定要按%d打印。原创 2010-04-21 01:39:00 · 171 阅读 · 0 评论 -
fgets scanf gets fscanf EOF
fgets 是读到一个换行就返回,并且把换行替换为’/0’ 而scanf是读到空格就返回,并且把空格替换为’/0’ 所以fgets显得更有用。 gets在遇到很长的行时会溢出,所以尽量用fgets。 EOF 是个整形。原创 2010-04-20 08:49:00 · 848 阅读 · 1 评论 -
core dump 文件
core 转储文件默认就在当前目录下。 可以在/proc/sys/core_pattern里面设置core dump文件的路径和格式。 也可以在/pro/sys/core_pid中设置是否以pid为后缀 默认情况下是没有打开coredump的,要用ulimit –c unlimited来打开,打开后编译的时候出出现core dump的字样 用gdb –c coredumpfile e原创 2009-06-16 10:10:00 · 206 阅读 · 0 评论 -
typedef 简单 为复杂的情况
有一个遗留问题,就是arg[10][20]的typedef问题原创 2010-05-03 10:00:00 · 185 阅读 · 0 评论 -
C experts reading
照这么说的话,c and pointers 中的情况就不存在了,也就是说遵循ANSI C不会把strlength(X)-10>0这个表达式判断错。C expert中前后矛盾 #define TOTAL_ELEMENTS (sizeof(array) / sizeof(array[0]) 2. 关于BUG switch后面的i可以是整形或者是整形的代数运算 注意const int i这个i并不是整形。。。如果用case i:就会出错。 如同c pinter中所说,标准中相邻的字符串可以自动合并,所以以原创 2010-05-03 10:01:00 · 201 阅读 · 0 评论 -
socket 超时设置
在send(),recv()过程中有时由于网络状况等原因,收发不能预期进行,而设置收发超时控制: 在Linux下需要注意的是时间的控制结构是struct timeval而并不是某一整型数,以下是来自于网上一篇文章中的摘录,它是这样写的:int nNetTimeout=1000;//1秒,//设置发送超时setsockopt(socket,SOL_SOCKET,SO_SNDTIMEO,(char *)&nNetTimeout,sizeof(int));//设置接收超时setsockopt(socket,SOL原创 2011-05-05 10:05:00 · 1212 阅读 · 0 评论 -
F_SETFD, FD_CLOEXEC
fcntl(fd, F_SETFD, FD_CLOEXEC); // 这里设置为FD_CLOEXEC表示当程序执行exec函数时本fd将被系统自动关闭,表示不传递给exec创建的新进程, 如果设置为fcntl(fd, F_SETFD, 0);那么本fd将保持打开状态复制到exec原创 2011-08-08 09:20:54 · 834 阅读 · 0 评论 -
tips for typedef and const
typedef char * pstr;int mystrcmp(pstr, pstr);标准函数 strcmp()有两个’const char *'类型的参数。因此,它可能会误导人们象下面这样声明 mystrcmp():int mystrcmp(const pstr原创 2010-05-06 03:56:00 · 215 阅读 · 0 评论 -
memmove/memcpy
相关函数: bcopy(), memccpy(), memcpy(), strcpy(), strncpy()表头文件: #include 定义函数: void *memmove(void *dest, const void *src, size_t n);函转载 2011-09-22 20:54:49 · 414 阅读 · 0 评论 -
空数组的作用
struct ast_exten { char *exten; /* Extension name */ int matchcid;转载 2011-09-23 21:37:34 · 1018 阅读 · 1 评论 -
关于EOF
EOF不存在于文件中,它的类型是int型。 可以这样去想,EOF在unix下ctrl+d, win下ctrl+z,并不会给文件写入什么字符,只是向getchar()之内的读流函数发送一个-1 很多情况下,-1和255还有377在截断后相同,所以要注意这个问题。这是因为EOF就是全FF,而-1也是FF,255也是FF,255也就是八进制的377,也就是/377.原创 2010-04-21 01:17:00 · 193 阅读 · 0 评论 -
Pointers on C reading
1. /ddd 8进制 2./xddd 16进制 ? 需要 /? 而 !则不用 宽字符常量就是在字符前面加上L,表示拿来当unicode使用,即将每个字符变成一个字来存储。 9.2 if(strlength(x) >= 10)… 和 if(strlength(x) – 10 > 0) 结果是不一样的,因为strlength返回的是size_t类型的无符变量。 9.3 strcpy是会把null复制过去的,所以某种角度看,被复制的那个字符串null后面的字符是无法访问的,也就是说丢失了的。而strncp原创 2010-04-20 09:12:00 · 495 阅读 · 0 评论 -
就是这哥们搞出来的linux-gate.so.1….gateway…好吧。。
From: David Mosberger (davidm@napali.hpl.hp.com)Date: Wed Jun 18 2003 - 14:12:21 ESTBoth x86 and ia64 now provide a dynamically shared object (DSO) forsystem call purposes (e.g., to speed up system calls and for signaltrampoline/sigreturn purposes). At the原创 2010-04-08 11:41:00 · 255 阅读 · 0 评论 -
calloc和malloc
<br />函数malloc()和calloc()都可以用来动态分配内存空间,但两者稍有区别。 malloc()函数有一个参数,即要分配的内存空间的大小: void *malloc(size_t size); calloc()函数有两个参数,分别为元素的数目和每个元素的大小,这两个参数的乘积就是要分配的内存空间的大小。 void *calloc(size_t numElements,size_t sizeOfElement);原创 2010-07-07 09:51:00 · 253 阅读 · 0 评论 -
inet_ntoa()
htonl() htons()及inet_ntoa() inet_addr()的用法 - tanwei1002的专栏 - CSDN博客 htonl() htons()及inet_ntoa() inet_addr()的用法 收藏 document.body.oncopy = function () { if (window.clipboardData) { setTimeout(fu原创 2010-08-26 15:54:00 · 114 阅读 · 0 评论 -
SO_RCVBUFFORCE
mytcp_sockets_allocated是到目前为止,整个tcp协议中创建的socket的个数,由mytcp_prot的成员sockets_allocated指向。可以在/proc/net/sockstat文件中查看,这只是一个供统计查看用的数据,没有任何实际的限制作用。 mytcp_orphan_count表示整个tcp协议中待销毁的socket的个数(已无用的socket),由mytcp_prot的成员orphan_count指向,也可以在/proc/net/sockstat文件中查看。原创 2010-08-26 15:28:00 · 1549 阅读 · 0 评论 -
EOF
请问cin>>和cin.get()对EOF的处理机制#include#includeusing namespace std;int main(){ char c; while(!cin.eof()) cin.get(c);//cin>>c; return 0;}采用cin.get()的时候运行时输入一个^Z程序就结束了。而采用cin>>的时候,输入^Z按回车程序并不结束,可以继续输入,除非紧接着又输入了一个^Z,程序才结束,太奇怪了!(VC++6.0) 输入缓冲是行原创 2009-05-10 06:29:00 · 221 阅读 · 0 评论 -
父进程子进程FAQ
ChinaUnix.net 首页 | 论坛 | 博客 | Linux | 人才 | 培训 | 精华 | Wiki | 读书 | 资料 | 手册 | 下载 | 搜索 ChinaUnix首页 > 精华文章 > C/C++ > 正文 [精彩] 子进程及时知道父进程已经退出的最简单方案? http://www.chinaunix.net 作者:yuonunix 发表于:2003-10-31 10:14:14 【发表评论】【查看原文】【C/C++讨论区】【关闭】 要父进程知道子进程退出,这太容易了,但是原创 2010-05-12 01:59:00 · 1596 阅读 · 1 评论 -
indent and random
<br />indent -kr -i8<br /> <br />K&R style, tab 8<br /> <br />random返回一样的值,要提供seed<br />random(time(NULL))原创 2011-04-07 11:01:00 · 218 阅读 · 0 评论 -
指针自增
++运算符分前缀++和后缀++,这两个实际上可以说是不同的运算符,表现在以下几点 1. 后缀++的优先级比前缀++高 2. 后缀++是左结合的,而前缀++是右结合的 3. 在写++运算符重载函数时,两个函数声明也是不同的 前缀++是operator++(),而后缀++是operator++(int) 4. 语义上的差别 a++表示a自增1,但表达式的值是a原来的值,类似 tmp=a, a=a+1, tmp; ++a表示a自增1,表达式的值就是a自增后的值,类似 a=a+1, a;原创 2010-04-08 12:18:00 · 1199 阅读 · 2 评论 -
gdb使用总结
<br />l: list current code<br />start: start programe and start in step mode<br />s: step to next sentence, but dont cross function<br />n: next sentence, but jump over function call<br />finish: finish current function<br />q: quit<br />r: run the program原创 2011-04-07 10:12:00 · 226 阅读 · 0 评论 -
Anex C 中的side effect 和 sequence point
<br />只有在sequence point之间的读写顺序确定的时候才能消除side effect.<br />比如<br />a[i++] = i,这实际上是错误的。不能保证结果<br />但是<br />i = i+1就可以,因为若需要计算i+1,则必须读出i.<br />同理<br />(++a) + (++a) + (++a)<br />这样的写法也是错误的,不能保证结果,因为运算符的顺序不能保证sequence point.原创 2011-04-07 10:35:00 · 293 阅读 · 0 评论 -
1's complement and 2's complement 浮点数比较问题
<br />1的补码就是取反,甚至省去了减法器,和9的补码一样,都是把首位的进位加到最低位。<br />但是导致+0和-0的表示方法不一样<br />2的补码解决了这个问题,但是是忽略了首位的进位。<br />负数: -128~-1<br />正数:0 ~ 127<br /> <br /> 浮点数不能用==比较,因为浮点数的存储方法决定的。原创 2011-04-07 10:44:00 · 496 阅读 · 0 评论 -
fork sample
printf("AAAAAAAA");//print 一次; 这里会print 2次如果你将 printf("AAAAAA") 换成 printf("AAAAAA\n") 那么就是只打印一次了.主要的区别是因为有了一个 \n 回车符号这就跟Printf的缓冲转载 2011-10-06 10:21:56 · 398 阅读 · 0 评论