
Linux
橙子cmr
一只还在学习的菜鸟
展开
-
思考题1.0
课后思考题: ① 如果多个用户对一个文件进行操作的时候,如何解决,考虑用文件锁的形式和多路复用形式 当多个用户对文件操作时,用户是不允许同时对进行修改。因此这里就需要用到文件锁来保证文件的安全性。 a.协同锁 协同锁要求参与操作的进程之间协同合作。只有当参与操作的进程是协同合作的时候,协同锁才能发挥作用。协同锁有时也被称为“非强制”锁。 b.强制锁 强制锁不需要参与操作的进程之间保持协原创 2016-10-22 07:57:53 · 352 阅读 · 0 评论 -
Linux下的文件管理函数(带I/O缓冲)1.0
1.fopen函数函数的作用:打开文件函数的原型:FILE *fopen(const char *pth, const char *mode) mode: r: 读,文件必须存在; r+:打开可读写,文件必须存在; w: 打开只写文件,文件不存在就会创建文件; 文件清0; w+:打开可读写的文件, a: 附加的形式打开只写文件,原创 2016-10-20 10:47:14 · 442 阅读 · 0 评论 -
进程
1.进程的概念 进程是一个具有一定独立功能的程序的一次运行活动,同时也是资源分配的最小单元2.进程与程序的关系 程序是放到磁盘的可执行文件,进程是指程序执行的实例 进程是动态的,程序使静态的 进程是暂时的,程序使长久的 进程与程序组成不同:进程的组成包括程序、数据和进程控制块(即进程状态信息) 进程与程序的对应关系:通过多次执行,一个程序可对应多个进程;通过调用关系,一个进程可包括多个程原创 2016-10-19 21:48:26 · 191 阅读 · 0 评论 -
用数据库实现通讯录(添加和查看联系人)
今晚就实现两个功能,可运行,细节有待完善,好饿。 明天再完善。void add_contact() { int ret; char sql[MAX_SIZE]; char name[MAX_SIZE]; char tel[MAX_SIZE]; char addr[MAX_SIZE]; char flag;printf("please p原创 2016-10-30 23:16:58 · 1270 阅读 · 0 评论 -
用数据库实现通讯录(删除和搜索联系人)
要记得传数据库的句柄db remove 函数其实就包括research 函数; 感觉可以直接调用那个函数比较简约。 完。void remove_contact(sqlite3 *db) { int i,j; int ret; int row,column; char flag; char s_name[MAX_SIZE]; int原创 2016-10-31 16:31:26 · 649 阅读 · 0 评论 -
linux高并发的socket的最大接入数
Linux下高并发socket最大连接数所受的限制问题 1、修改用户进程可打开文件数限制 在Linux平台上,无论编写客户端程序还是服务端程序,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制(这是因为系统为每个TCP连接都要创建一个socket句柄,每个socket句柄同时也是一个文件句柄)。可使用ulimit命令查看系统允许当前用户进程打开的文件转载 2016-11-15 23:27:20 · 324 阅读 · 0 评论 -
Linux C编程--sizeof面试题选
结构体和共用体的内存分配是C语言的一个难点,也是面试题中的热点。 示例1: Union data1 { double d; int i; char c1; char c2[9]; };sizeof(union data1)的值为16.在编译器默认设置的情况下,该共用体最大基本类型为double,它占8字节,所以此共用体以8来对齐。字符数组c2占9个字节,那么整个转载 2016-11-16 21:03:09 · 470 阅读 · 0 评论 -
LINUX多线程
一、线程的特点线程是进程的一个执行流,是CPU调度和分配的基本单位。线程是程序运行的最小单位。线程不会影响到其它线程的运行。比如一个线程崩溃,其它线程正常运行。同一进程内的线程共享进程的地址空间。二、一个线程的组成一个指向当前被执行指令的指令指针一个栈空间一个寄存器值的集合一个私有的数据区三、使用线程的优点同一进程下的多线程共享地址空间,减少的资源的浪费。线程间方便的通信机制。转载 2016-11-01 23:06:20 · 223 阅读 · 0 评论 -
有关线程的函数
1、函数pthread_create 作用:创建线程 函数原型:int pthread_create(pthread_t * tidp,const pthread_attr_t*attr,void*(*start_rtn)(void),void*arg) 参数: tidp:线程id attr: 线程属性(通常为空) start_rtn:线程要执行的函数 arg:start_r原创 2016-11-02 20:41:03 · 268 阅读 · 0 评论 -
使用父子进程实现TCP通信
include include include include include include include include define MY_PORT 3333int main(int argc ,char **argv) { int listen_fd,accept_fd; struct sockaddr_in client_addr; int n;转载 2016-11-18 23:23:58 · 604 阅读 · 0 评论 -
几种进程间通信方式
Linux上面的IPC大多都是从UNIX上面继承而来。 最初Unix IPC包括:管道、FIFO、信号。System V IPC包括:System V消息队列、System V信号灯、System V共享内存区。由于Unix版本的多样性,电子电气工程协会(IEEE)开发了一个独立的Unix标准,这个新的ANSI Unix标准被称为计算机环境的可移植性操作系统界面(PSOIX)。现有大部分Unix原创 2016-12-04 22:29:09 · 482 阅读 · 0 评论 -
线程实现消费者和生产者机制
//#include < stdio.h> //#include < semaphore.h> //#include < pthread.h> //#include < stdlib.h>sem_t full; sem_t empty;int num = 0; char buf[BUFSIZ];void * producer(void) { while(1) {原创 2016-10-29 22:06:29 · 251 阅读 · 0 评论 -
共享内存
共享内存 是被多个进程共享的一部分物理内存.共享内存是进程间共享数据的一种最快的方法,一个进程向共享内存区域写入了数据,共享这个内存区域的所有进程就可以立刻看到其中的内容. 共享内存实现分为两个步骤: 1、创建共享、打开共享内存,使用shmget函数 2、映射共享内存,将这段创建的共享内存映射到具体的进程空间去,使用shmat函数 3、分离共享内存 4、 控制、删除共享内存函数原创 2016-10-28 19:04:24 · 205 阅读 · 0 评论 -
进程通信,管道通信 1.0
一、进程通信的目的: 1.数据传输:一个进程需要将它的数据发送给另一个进程 2.资源共享:多个进程之间共享同样的资源 3.通知事件:一个进程需要向另一个或一组进程发送消息,通知它们发生了某种事件 4.进程控制:有些进程希望完全控制另一个进程的执行(如Debug进程),此时控制进程希望能够拦截另一个进程的所有操作,并能够及时知道它的状态改变二、管道通信 • 管道是单向的、先进先出的,它把一个原创 2016-10-22 23:46:57 · 307 阅读 · 0 评论 -
线程互斥
mutex互斥锁线程控制 互斥锁是用一种简单的加锁方法来控制对共享资源的原子操作。 互斥锁只有两种状态,也就是上锁和解锁,可以把互斥锁看作某种意义上的全局变量。 在同一时刻只能有一个线程掌握某个互斥锁,拥有上锁状态的线程能够对共享资源进行操作。若其他线程希望上锁一个已经被上锁的互斥锁,则该线程就会挂起,直到上锁的线程释放掉互斥锁为止。互斥锁的基本操作: 互斥锁初始化:pthread_转载 2016-11-03 22:49:03 · 229 阅读 · 0 评论 -
无名管道的使用
创建无名管道: //#include < unistd.h > //#include < errno.h > //#include < stdio.h > //#include < stdlib.h >int main(){int pipe_fd[2];if(pipe(pipe_fd)<0){printf("pipe create error\n");return -1;}else原创 2016-10-24 22:56:48 · 381 阅读 · 0 评论 -
有名管道的使用
命名管道和无名管道基本相同,但也有不同点: 无名管道只能由父子进程使用; 但是通过命名管道,不相关的进程也能交换数据。关于有名管道的操作: 1.创建管道mkfifo 2.打开管道open 3.读管道read 4.写管道write 5.关闭管道close 6.删除管道unlinkFIFO文件在使用上和普通文件有相似之处,但是也有不有 不同之处: 1. 读取fifo文件的进程只能以”原创 2016-10-25 15:41:14 · 469 阅读 · 0 评论 -
linux.socket
前面说到的进程间的通信,所通信的进程都是在同一台计算机上的,而使用socket进行通信的进程可以是同一台计算机的进程,也是可以是通过网络连接起来的不同计算机上的进程。通常我们使用socket进行网络编程,这里将会简单地讲述如何使用socket进行简单的网络编程。一、什么是socket socket,即套接字是一种通信机制,凭借这种机制,客户/服务器(即要进行通信的进程)系统的开发工作既可以在本地单原创 2016-11-06 23:23:11 · 272 阅读 · 0 评论 -
Linux下的文件管理函数(不带I/O缓冲)
1.creat 函数的作用: 创建一个文件; 函数的原型: int creat(const char *pathname, mode_t mode); 文件头: #include < sys/types.h > #include < sys/stat.h > #include < fcntl.h > 返回值:成功:新的文原创 2016-10-16 23:02:20 · 485 阅读 · 0 评论 -
信号通信
信号(signal)机制是Unix系统中最为古老的进程间通信机制,很多条件可以产生一个信号: 1、当用户按某些按键时,产生信号 2、硬件异常产生信号:除数为0、无效的存储访问等等。这些情况通常由硬件检测到,将其通知内核,然后内核产生适当的信号通知进程,例如,内核对正访问一个无效存储区的进程产生一个SIGSEGV信号 3、进程用kill函数将信号发送给另一个进程原创 2016-10-26 22:27:30 · 256 阅读 · 0 评论 -
Linux下的文件管理函数(不带I/O缓冲)2.0
11 fwrite 函数的作用: 将数据块写到文件流中: 函数原型: size_t fwrite(const void * ptr, size_t size, size_t nmemb, FILE *stream); 返回值: 实际写入的nmemb数目;12 fseek 函数的作用:移动文件流的读写位置 函数的原型: int fseek(FILE * stream, long原创 2016-10-17 20:57:44 · 299 阅读 · 0 评论 -
信号通信2.0
//#include < signal.h> //#include < stdio.h> //#include < stdlib.h>void my_func(int sign_no) { if(sign_no==SIGINT) printf("I have get SIGINT\n");else if(sign_no==SIGQUIT) printf("I h原创 2016-10-27 23:03:31 · 270 阅读 · 0 评论 -
Linux下的文件管理函数(不带I/O缓冲)3.0
exec函数族1.execl 函数作用:执行文件 函数原型:int execl(const char * path,const char * arg,…); 头文件:#include < unistd.h > 参数:path:文件路径 arg:表示执行该文件时传过去的argv[1],argv[2],…. 参数最后必须要以NULL结束 返回值:成功不返回,失败-12.exe原创 2016-10-18 22:43:57 · 361 阅读 · 0 评论 -
kill 9与kill -9
默认参数下,kill 发送SIGTERM信号给进程,告诉进程,你需要被关闭,请自行停止运行并退出。kill -9 发送SIGKILL信号给进程,告诉进程,你被终结了,请立刻退出。。与SIGTERM相比,这个信号不能被捕获或忽略,同时接收这个信号的进程在收到这个信号时不能执行任何清理。原创 2017-07-19 10:10:26 · 879 阅读 · 0 评论