linux
文章平均质量分 64
一枝春美食
这个作者很懒,什么都没留下…
展开
-
Copy-on-write
写入时复制(Copy-on-write)是一个被使用在程式设计领域的最佳化策略。其基础的观念是,如果有多个呼叫者(callers)同时要求相同资源,他们会共同取得相同的指标指向相同的资源,直到某个呼叫者(caller)尝试修改资源时,系统才会真正复制一个副本(private copy)给该呼叫者,以避免被修改的资源被直接察觉到,这过程对其他的呼叫只都是通透的(transparently)。此作转载 2014-08-25 09:51:10 · 582 阅读 · 0 评论 -
从“hello”开始去分析linux下的socket编程
如题,从一个简单示例去分析socket的编程。首先给出源码server.c#include #include #include #include #include #include int main(){int sfp,nfp;struct sockaddr_in s_add,c_add;int sin_size;unsigned short portnum=0原创 2015-04-17 11:12:18 · 534 阅读 · 0 评论 -
修正对extern的一些误解
之前使用extern作为编译器的链接关键词时,潜意识以为,在extern声明的代码中只能调用而不能改变,其实这只是方便编译的,最终还是生成一个object文件,是可以修改的, 在实验楼linux64位实验如下shiyanlou:Code/ $ cat returna.c [10:28:59]int a=0;int bac原创 2015-05-30 10:30:26 · 426 阅读 · 0 评论 -
在linux上完成自己的my_ls命令的编写(对dirent.h的研究)
用惯了,ls,想看看ls是如何实现的或者自己写一个自己的ls脚本命令。 偶然在c++沉思录上看到这个问题。关于dirent.h的库。 首先看看dirent是个什么gui,来自无所不知谷歌的解释Dirent is an application programming interface (API) that enables programmers to list files and directo原创 2015-05-18 21:38:04 · 930 阅读 · 0 评论 -
函数返回值为指针的一个陷阱(使用inet_ntoa函数时遇到的问题)
此函数在socket编程中使用,将32位大端序整型格式IP地址转换为点分十进制格式。成功时返回转换的字符串地址值,失败时返回-1。char * inet_ntoa(struct in_addr addr);使用一段小代码测试#include #include int main(void){ struct in_addr addr1, addr2; char原创 2015-06-01 22:03:28 · 1075 阅读 · 0 评论 -
linux 0.12之head.s跳转到main.c的说明
因为只有引导代码中使用了as86的编译器,linux0.12其他汇编都是基于GNU as汇编的,这是背景。 head.s是在gnu as下编译的,使用的是AT&T汇编模式。主要完成一些GDT的初始化,然后跳转到main.c函数执行,这两者如何顺利调用的,今天研究一下。 下面是linus给出的关键源码:after_page_tables: pushl $0 # These are the p原创 2015-06-23 20:11:29 · 1172 阅读 · 0 评论 -
由strlen()引发的小问题(有符号无符号比较的汇编层次理解)
看到strlen的源码,很简单,检测‘\0’ 下面为我的源码#define NOP do{}while(0)unsigned int mstrlen(const char * str){ int length; for(length=0;*str!='\0';str++) length+=1; return length;}这里有个细节 就是返回值是无原创 2015-05-19 22:49:01 · 641 阅读 · 0 评论 -
linux之return和exit引发的大问题(vfork和fork)
在coolshell.cn上看到的一个问题,为此拿来研究一下。 首先 看看return和exit的区别 在linux上分别跑一下这个代码int main(){ return 0; //exit(0);}return 0 exit(0) return在返回时会对栈进行操作,将栈清空,然后跳转到调用函数的下一条指令,而exit没有对栈操作,具体exit怎么运行,原创 2015-07-21 13:41:40 · 924 阅读 · 0 评论 -
unix网络编程I卷之关于wait在不同系统中的表现扩展出来的问题
在书中,服务器利用信号,完成子进程的“收尸”工作。如下void sig_chld(int signo){ pid_t pid; int stat; pid=wait(&stat); printf("child %d terminated\n",pid); return;}在fork之前调用 signal(SIGCHLD,sig_c原创 2016-01-22 10:27:12 · 449 阅读 · 0 评论 -
kernel---进程创建研究之 fork()
首先提取出原创 2014-09-25 21:02:49 · 461 阅读 · 0 评论 -
不依赖glibc库的hello world的学习
在研究gcc的编译 链接时,遇到的比较有意思的东西。号称最小的程序。原创 2015-03-13 22:29:08 · 1379 阅读 · 0 评论 -
c中变参函数的理解和编写(hello world引发的思考)
前面从编译链接的角度从新理解了hello world代码,这里还有个printf这个函数很神奇。参数可变。下载glibc库/stdio-common$ cat printf.c可以看到printf的源码/* Copyright (C) 1991-2013 Free Software Foundation, Inc. This file is part of the GNU C Lib原创 2015-03-18 19:49:44 · 948 阅读 · 0 评论 -
关于 linux 管道中 read 和 write的返回值问题
一直不了解 在pipe中 read()和write(原创 2014-08-23 20:36:28 · 3000 阅读 · 2 评论 -
clone() 在编译中 出现的问题
编译时 出现错误: ‘CLONE_VM’未声明(在此函数内第一次使用)错误: ‘CLONE_SIGHAND’未声明(在此函数内第一次使用)clone_p_c.c:28:36: 错误: ‘CLONE_FS’未声明(在此函数内第一次使用)clone_p_c.c:28:45: 错误: ‘CLONE_FILES’未声明(在此函数内第一次使用)原创 2014-08-24 20:11:16 · 2334 阅读 · 0 评论 -
关于printf函数的研究
printfprintf是一个行缓冲函数,先写到缓冲区,满足条件后,才将缓冲区刷到对应文件中,刷缓冲区的条件如下: 1 缓冲区填满 2 写入的字符中有‘\n’ '\r' 3 调用fflush手动刷新缓冲区 4 调用scanf要从缓冲区中读取数据时,也会将缓冲区内的数据刷新原创 2014-08-23 10:52:15 · 545 阅读 · 0 评论 -
Linux 系统中僵尸进程
Linux 系统中僵尸进程和现实中僵尸(虽然我也没见过)类似,虽然已经死了,但是由于没人给它们收尸,还能四处走动。僵尸进程指的是那些虽然已经终止的进程,但仍然保留一些信息,等待其父进程为其收尸。配图源自 Flickr 僵尸进程如何产生的?如果一个进程在其终止的时候,自己就回收所有分配给它的资源,系统就不会产生所谓的僵尸进程了。那么我们说一个进程终止之后,还保留哪些信息?为什么终止之后还转载 2014-08-23 10:09:37 · 342 阅读 · 0 评论 -
socket 关于INADDR_ANY的问题
是用于多IP机器上 比如你的机器有三个ip 192.168.1.1 202.202.202.202 61.1.2.3 如果你serv.sin_addr.s_addr=inet_addr("192.168.1.1"); 然后监听100端口 这时其他机器只有connect转载 2014-08-26 14:47:07 · 487 阅读 · 0 评论 -
关于 ubantu与 linux arm开发板的 tcp soket 通信
服务器端#include#include#include#include#include#include#include#include#define PORT 2000#define BACKLOG 1int main(int argc,char ** argv){ int fd1,fd2; int t; struct sockaddr_in server_a原创 2014-08-26 15:55:55 · 746 阅读 · 0 评论 -
关于用户程序内存的管理的实验(再思考fork)
如题,一般用户程序的原创 2014-09-22 21:18:03 · 473 阅读 · 0 评论 -
利用联合体完成一些数据处理的问题
ad原创 2014-10-02 10:27:51 · 731 阅读 · 0 评论 -
APUE之变量errno总结
关于这个变量的研究将会是持续的,并保持更新。 先看看其最常见的说明: 只要一个Unix函数中有错误发生,全局变量errno就被置为一个指明该错误类型的正值,函数本身则通常返回-1。 errno的值只在函数发生错误时设置。如果函数不返回错误,errno的值就没有定义。errno的所有正数错误值都是常值,具有以“E”开头的全大写字母名字,并通常在sys/errno.h头文件中定义。原创 2016-01-22 15:37:09 · 427 阅读 · 0 评论