Linux
djw931017
这个作者很懒,什么都没留下…
展开
-
Linux下关闭标准输出并直接输出到文件中,再重新打开标准输出
代码如下: int fd=open("test.txt",O_RDWR|O_CREAT); printf("\n"); //回车不可少。只有按下回车后,数据才被送往键盘缓冲区,形成输入流 int stdout_cp=100; //先用dup2(...)函数复制stdout文件描述符1,然后复制回去 dup2(1,stdout_cp); close(1); ...原创 2019-02-22 16:42:38 · 2931 阅读 · 0 评论 -
Linux 文件描述符 文件表项 i节点结构
Linux的VFS(虚拟文件系统)学习起来很痛苦,看源码不太明智,看完分析完就忘且太浪费时间,懂了后也无法应用在实际场合中。所以这里只是讨论下文件描述符,文件表项(file结构体)和inode,理清实现的思路。一、概念首先区分文件描述符和打开的文件。内核维护了三个数据结构,分别是:进程级的文件描述符表(即每个进程一个);系统级的打开文件表(即该表在整个内核中只有一个),表项为struct ...原创 2019-03-19 00:24:07 · 1122 阅读 · 0 评论 -
同步、异步、阻塞、非阻塞与5种I/O模型
一、概念1.同步与异步同步(synchronous )和异步(asynchronous)关注的是消息通信机制 ,主体是内核。同步:在发出一个调用后,没得到结果之前,该调用就不返回。但是一旦调用返回,就得到返回值了。换句话说,就是由调用者主动等待这个调用的结果。异步:调用在发出之后,这个调用就直接返回了,所以没有返回结果。换句话说,当一个异步过程调用发出后,调用者不会立刻得到结果。而是在调用...原创 2019-03-12 22:56:39 · 264 阅读 · 0 评论 -
Linux下线程池的实现
之前用epoll和进程池实现的简单的文件传输功能有一个缺点,就是没有排队功能。当进程池中所有进程都在工作,后到来的请求可能因为timing合适,正好有进程空闲,反而比先到的请求更早得到相应。为了实现“先请求客户端,优先服务”的功能,本文用进程池和任务队列实现了排队功能,让客户端遵从先到先得的顺序进行任务传输。一、概念分析线程池的实现类似于生产者消费者模型。关键在于建立一个任务队列,当有客户端发...原创 2019-03-20 20:16:37 · 273 阅读 · 0 评论 -
使用epoll和进程池实现具有简单的数据传输功能的FTP文件服务器
一、大致思路如图所示,为线程池的基本框架首先定义服务器端的数据类型struct data{ pid_t pid; //进程pid int fd; //管道id short busy; //进程是否忙碌 0非忙碌 1忙碌}父进程流程初始化管道,创建子进程,每个子进程等待父进程发送任务初始化socket,bind端口,listen初...原创 2019-03-18 14:54:55 · 920 阅读 · 0 评论 -
pthread_cond_wait
int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex)int pthread_cond_timedwait(pthread_cond_t *cond, pthread_mutex_t *mutex, const struct timespec *abstime)等待条件有两种方式:条件等待pthread_con...原创 2019-03-13 22:38:24 · 169 阅读 · 0 评论 -
使用select实现进程间的即时聊天
首先使用mkfifo命令新建两个管道文件1.fifo和2.fifo。首先画图分析:如图所示,1.fifo的读端是进程1,写端是进程2;2.fifo的读端是进程2,写端是进程1。且进程1与2均从标准输入流读取数据。所以要注意,进程1的读操作描述符字为0与1.fifo;进程2的读操作描述符字为0与2.fifo.1号和2号的命令行参数均为1.fifo 2.fifo1号的代码为:#includ...原创 2019-02-26 22:04:15 · 307 阅读 · 0 评论 -
Clion 中无法用相对路径读入文件
代码中有这一句:int fd1=open("./a.txt",O_RDONLY);printf("fd1=%d\n",fd1);在clion中运行,输出的是fd1=-1。而在vim中运行同一段代码,fd1=3。在将代码的相对路径改为绝对路径后,即由./a.txt改为/home/djw931017/dup/a.txt后,在clion中输出又与vim相同。在搜索后,才发现原因:使用CLion...原创 2019-02-20 23:26:45 · 4675 阅读 · 4 评论 -
st_atime、st_mtime和st_ctime
struct stat 定义:struct stat { dev_t st_dev; /* ID of device containing file -文件所在设备的ID*/ ino_t st_ino; /* inode number -inode节点号*/ mode_t st_mode; /* 文件的类...原创 2019-02-20 14:55:12 · 10406 阅读 · 1 评论 -
struct passwd与struct group
一、struct passwd#include <sys/types.h>#include <pwd.h>struct passwd{ char *pw_name; /* 用户登录名 */ char *pw_passwd; /* 密码(加密后) */ __uid_t p原创 2019-02-13 23:51:45 · 1961 阅读 · 0 评论 -
st_mode分析
在Linux中,可以利用stat()函数来获取一个文件的状态。#include <sys/stat.h>#include <unistd.h> int stat(const char *file_name, struct stat *buf);这个函数执行成功返回0,失败返回-1。取得的文件状态存放在b原创 2019-02-11 22:29:31 · 3135 阅读 · 1 评论 -
Linux下一些文件的作用
/usr :包含了命令库文件和在通常操作中不会修改的文件。这个目录位类似Windows上面的”Program Files”目录(安装程序的时候,默认就是安装在此文件内部某个子文件夹内。输入命令后系统默认执行/usr/bin下的程序)当然,前提是这个目录的路径已经被添加到了系统的环境变量中。此目录通常也会挂载一个独立的磁盘分区,它应保存共享只读类文件,这样它可以被运行Linux的不同主机挂载。/...原创 2019-07-06 21:51:53 · 155 阅读 · 0 评论