摘要:
先说些题外话,今天学习execve(2)的使用,由于书上代码使用的是C89标准,所以下面这种代码都被我修改了 也就是在char前面加个const,因为"aaa"、"bbb"、"cc"都是字符串字面值(string literal),在C++标准中string literal只能转换成const ch 阅读全文
摘要:
参考《Linux/Unix系统编程手册》26.1.5,对于系统调用waitid() 若在option中设置WNOHANG位,与那么该系统调用就是非阻塞的,也就是说会立刻返回而不是等待子进程的状态发生变化。 如果子进程的状态(正在运行or正常退出or被信号终止or被信号停止)发生变化,则会把状态具体信 阅读全文
摘要:
之前写TLPI上的代码一直是手动进行错误处理,感觉代码冗余量很大,最后还是决定使用书上的tlph_hdr.h,顺便回顾下动态库的创建/使用。 参考很久之前的一篇博客 linux上静态库和动态库的编译和使用 但是感觉这篇博客写了后我一直没真正用过动态库,于是花了些时间复习下,结果倒好,一直出问题。 f 阅读全文
摘要:
上述代码是忽略了错误处理后的代码,其中Dlg类的OnReceive方法是给CAsyncSocket的派生类的OnReceive方法调用的(在此之前派生类保存了Dlg类的指针)。 由于是UDP套接字,所以不存在粘包问题,SendTo和RecvFrom的返回值是一样的(说明发送和接收的数据大小一样),那 阅读全文
摘要:
在unistd.h中定义了变量char **environ;来表示当前所有环境变量,一般来说访问特定环境变量可以用getenv,但是想遍历所有环境变量就得使用environ。 即在程序内全局声明extern char **environ;当然设定main函数第3个参数也可以,不过不推荐,因为ISO 阅读全文
摘要:
C++中由于有构造函数的概念,所以很多时候初始化工作能够很方便地进行,而且由于C++标准库中有很多实用类(往往是类模板),现代C++能十分容易地编写。 比如现在要构造一个类Object,包含两个字段,一个为整型,一个为字符串。C++的做法会像下面这样 这样的代码简洁、安全,C++通过析构函数来实现资 阅读全文
摘要:
刚看完信号那章,觉得处理信号时的sigsetjmp/siglongjmp似乎跟异常的跳出很像,于是想去复习C++异常,然后发现了对I/O没有充分理解的问题。 题目是C++ Primer 5.6.3节的练习5.25,描述如下: 1、从标准输入读取2个整数, 输出第1个整数除以第2个整数的结果。 2、如 阅读全文
摘要:
今天突然想试下纯socket编程在两个系统上代码重合量有多大,只要不使用VC自定义的宏(比如SOCKET、SOCKADDR等等)感觉代码重合量挺大的。 比如最简单的TCP客户端和服务端对话,在VC中用int取代SOCKET宏,用struct sockaddr_in取代SOCKADDR_IN宏。 然后 阅读全文
摘要:
早期ISO C提供了像这样的函数来支持自定义信号处理 但是由于标准库并不涉及系统层次,所以很多细节方面都是未定义的,比如在执行某信号(下文均以SIGINT为例)的处理器函数时,是否阻塞该信号? 给出一段代码(均忽略了对系统调用的错误处理) 这段代码的执行结果是不确定的,参考APUE,早期版本sign 阅读全文
摘要:
就是模拟setuid seteuid setreuid setresuid,感觉代码比书上大段的文字好记,就写成代码形式了。 main函数是TLPI第9章习题第1道的运行结果,然后模拟了一遍功能,后面几道也很简单就能做出来了。以后忘记的话看遍代码就能很快记起来了。 阅读全文