
linux的点点滴滴
文章平均质量分 67
Everlasting2016
我流我的汗水,华丽如天花乱坠
展开
-
关于重定向和缓存区
//标准I/O是缓冲的,如果标准输出到终端设备,则它是⾏行缓冲,否则它是全//缓冲#include #include #include #include const char * msg ="hehe,ni shi ge hao ren \n";int g_val = 0;int main(){ int val = 0; printf("before for原创 2016-07-27 09:04:33 · 1540 阅读 · 0 评论 -
UDP
代码:server.c://server端#include #include#include#include#include#include#include#includevoid Usage(const char* proc){原创 2016-07-28 23:27:29 · 536 阅读 · 0 评论 -
Linux学习之基本概念
1.Linux系统特性:开放性,多用户,多任务,良好的用户界面(Linux的传统界面是基于文本的命令行界面,即shell,有很强的程序设计能力,用户可方便的用它编制程序,从而为用户扩充系统功能提供更高级的手段。Linux特点:开源 免费 稳定,具有设备独立性,丰富的网络功能,可靠地网络安全,良好的可移植性。2.Linux分为内核和shell,内核是操作系统的核心,功能:虚拟内存,原创 2016-07-28 19:39:31 · 476 阅读 · 0 评论 -
共享内存(shm)
代码:comm.h:#ifndef _COMM_#define _COMM_#include #include #include #include #include #define _PATH_ "."#define _PROJ_ID_ 0x6602int create_shm(int _size);int get_shm(int _size);int desto原创 2016-07-28 19:37:02 · 624 阅读 · 0 评论 -
信号量(sem)
代码:comm.h:#ifndef _MYSEM_#define _MYSEM_#include #include #include #include #define _PATH_ "."#define _PROJ_ID_ 0x0603typedef union semun { int val; /* Value for SETVAL */struct原创 2016-07-28 18:12:21 · 701 阅读 · 0 评论 -
消息队列(msg)
代码:comm.h:(是一层对于函数接口的封装)#ifndef _DEBUG_#define _DEBUG_#include #include #include #include #include #define _PATH_ "." //当前路径下#define _PROJ_ID_ 0x6654#define _SIZE_ 3000#define S原创 2016-07-28 17:45:06 · 851 阅读 · 0 评论 -
命名管道(FIFO)
代码:client.c#include #include #include #include #include #define __PATH__ "/home/chen/7Month/7_28/FIFO/my_fifo"//这个就是管道的名字,和建立的路径int main(){ int fd = open(__PATH__,O_WRONLY,0);//以只写的原创 2016-07-28 16:33:09 · 502 阅读 · 0 评论 -
管道(PIPE)
代码:#include #include #include #include #include int main(){ int _pipe[2]; int ret = pipe(_pipe); if(ret == -1){ printf("create pipe error! errno code is : %d\n",errno); retur原创 2016-07-28 11:32:57 · 373 阅读 · 0 评论 -
wait和waitpid函数
一、wait函数代码:#include #include #include #include int main(){ pid_t id = fork(); if(id == 0){ printf("child:pid:%d,ppid:%d\n",getpid(),getppid()); sleep(10); exit(3); }else{ printf("This原创 2016-07-28 00:46:05 · 419 阅读 · 0 评论 -
打印环境变量和参数列表的方法
一、打印参数列表代码一:#includeint main(int argc,char* argv[],char*env[]){ int i=0; while(argv[i] != NULL) { printf("%s \n",argv[i]); i++; } return 0;}代码二:#includeint main(int原创 2016-07-28 00:12:15 · 1439 阅读 · 0 评论 -
write和fwrite函数(文件描述符)
代码:#include #include char * msg = "hello\n";int main(){ printf("world \n"); write(1,msg,strlen(msg)); fwrite(msg,1,strlen(msg),stdout); sleep(3);}运行结果:分析:一个使用的是文件描述符,一个使用的是文件指针原创 2016-07-27 11:15:57 · 2052 阅读 · 0 评论 -
exec函数的使用
代码:#include #include #include int main(int argc,char* argv[]){ pid_t id = fork(); if(id == 0){ execl("/bin/ls","ls","-al","../xiao_exec",NULL);//如果execl函数执行成功,就不会执行printf语句,没有返回 //execlp(原创 2016-07-27 23:55:01 · 748 阅读 · 0 评论 -
c函数调用过程原理及函数栈帧分析
今天突然想分析一下函数在相互调用过程中栈帧的变化,还是想尽量以比较清晰的思路把这一过程描述出来,关于c函数调用原理的理解是很重要的。1.关于栈 首先必须明确一点也是非常重要的一点,栈是向下生长的,所谓向下生长是指从内存高地址->地地址的路径延伸,那么就很明显了,栈有栈底和栈顶,那么栈顶的地址要比栈底低。对x86体系的CPU而言,其中---> 寄存器ebp(ba转载 2016-07-27 11:44:56 · 529 阅读 · 1 评论 -
vfrok()的使用
代码:#include #include #includeint g_val=0;int main(){ int val = 0; // pid_t id = fork(); pid_t id = vfork(); //vfork创建的子进程是在父进程的空间上进行操作,如果不exit则会破坏父进程的 //栈空间,出现段错误或者死循环 if(id < 0)原创 2016-07-27 10:48:08 · 671 阅读 · 0 评论 -
打开文件和写文件的操作
使用系统调用的:open好write代码://打开文件和写问件#include #include #include #include #include #include #include #include const char* msg = "hello world \n";int main(){ close(1); //close(2); int f原创 2016-07-27 10:04:12 · 518 阅读 · 0 评论 -
fork()多次之后父子进程的数目变化
代码: #include int main(){ int i=0; int j=0; for(i=0; i< 3; i++) { int id = fork(); if(id == 0) { printf("i am child:%d\n",j); } else { j+原创 2016-07-27 09:31:16 · 1185 阅读 · 0 评论 -
fork()后父子进程的地址空间
#includeint main(){ int common =123; int pid = fork(); if(pid == 0) { printf("this is child,pid=%d ppid=%d\n",getpid(),getppid()); printf("add:%p val:%d\n",&common,common); } else if原创 2016-07-27 09:10:08 · 851 阅读 · 0 评论 -
TCP
代码:server.c://服务器端 #include #include#include#include#include#include#includeint start(const char* _ip,const int _port){ int listen_so原创 2016-07-29 00:04:46 · 309 阅读 · 0 评论