随笔分类 -  Linux Programming

摘要:题目 共要卖票20张,由命令行输入窗口数,由线程模拟窗口。每卖掉一张票,屏幕显示由几号窗口所卖,一并显示剩余票数 思路 由于票数 ticket_cnt 是全局变量,因此每当一个线程将其减一(卖出一张票),并将其显示,应该被封装为一个原子操作。因为线程是并发执行的,可能当前线程将ticket_cnt减1后还没有来得及显示此时的剩余票数ticket_cnt,ticket_cnt已经被另一个线程减一了。... 阅读全文
posted @ 2014-08-25 22:15 Acjx 阅读(592) 评论(0) 推荐(0)
摘要:在上一篇博文中,我们的程序中我们有3个客户端,因此也事先建立了3个管道,每个客户端分别使用一个管道向服务器发送消息。而在服务器端使用select系统调用,只要监测到某一管道有消息写入,服务器就将其read,并显示在标准输出上。 本篇文章,我们会让服务器拥有一个管道,专门用于从客户端接收消息(上线通知,发送需要服务器转发的消息以及下线通知)。服务器需要维护一个列表(使用结构体),记录哪些用户已经连上... 阅读全文
posted @ 2014-08-24 00:43 Acjx 阅读(1091) 评论(0) 推荐(0)
摘要:SYNOPSIS /* According to POSIX.1-2001 */ #include /* According to earlier standards */ #include #include #inclu... 阅读全文
posted @ 2014-08-23 23:02 Acjx 阅读(2316) 评论(0) 推荐(0)
摘要:NAME popen, pclose - pipe stream to or from a processSYNOPSIS #include FILE *popen(const char *command, const char *type); int pclose(FILE *stream);DESCRIPTION The popen... 阅读全文
posted @ 2014-08-23 12:43 Acjx 阅读(628) 评论(2) 推荐(0)
摘要:编程实现3人间相互通信 思路:需要防止打开管道时,陷入死锁。 总共需要建立3对管道,6个管道。每两个用户之间都有一对管道。一个用户有2个读端和2个写端。 :1 :2 :3 1-2 w 1-2 r 1-3 r 1-3 w 2-1 w 3-1 w 2-1 r 2-3 w 2-3 r 3-1 r 3-2 r 3-2 w 注意 此处每个用户,都是fork出2个子进程,总共3个进程。其中2个进程用于分别接... 阅读全文
posted @ 2014-08-22 23:24 Acjx 阅读(204) 评论(0) 推荐(0)
摘要:编程实现双方通信 思路 用户A 用户B 写 (管道) 读 读 (管道) 写 在之前有名管道的博文中,实现的双方一发一收即为上图所描述的。建立两条管道,一条负责由A传消息给B,另一条负责由B发消息给A。 当用户A发消息给B时,B可以立即读到消息。此时A的read为阻塞,必须等到用户B发消息给A,A读到消息后,A才可以继续发消息给B。即之前博文的程序,无法实现A连续发送消息给B。 因此在这篇文章中,我... 阅读全文
posted @ 2014-08-22 20:27 Acjx 阅读(346) 评论(2) 推荐(0)
摘要:用有名管道实现进程A与进程B消息一发一送 程序a.c /************************************************************************* > File Name: a.c > Author: KrisChou > Mail:zhoujx0219@163.com > Created Time: Fri 22 Aug 2014... 阅读全文
posted @ 2014-08-22 17:36 Acjx 阅读(414) 评论(0) 推荐(0)
摘要:在讨论匿名管道之前,我们先回顾下read和write系统调用以及fgets函数 #include ssize_t read(int fd, void *buf, size_t count);当read成功时,返回值为读到的字符数。当遇见文件结尾时,返回0(也就是什么都读不出来了)。出错,返回-1。—> 参考 man 2 read#include ssize_t write(int fd, cons... 阅读全文
posted @ 2014-08-22 10:39 Acjx 阅读(320) 评论(0) 推荐(0)
摘要:/************************************************************************* > File Name: Kris_shell.c > Author: KrisChou > Mail:zhoujx0219@163.com > Created Time: Thu 21 Aug 2014 04:31:55 ... 阅读全文
posted @ 2014-08-22 09:45 Acjx 阅读(325) 评论(0) 推荐(0)
摘要:1. 引言 一个程序是存储在文件中的机器指令序列。一般它是由编译器将源代码编译成二进制格式的代码。运行一个程序意味着将这个机器指令序列载入内存然后让处理器(cpu)逐条执行这些指令。 在Unix术语中,一个可执行程序是一个机器指令及其数据的序列。一个进程是程序运行时的内存空间和设置。 数据和程序存储在磁盘文件中,程序在进程中运行。 2. ps 进程存在于用户空间。用户空间是存放运行的程序和它们的数... 阅读全文
posted @ 2014-08-20 21:41 Acjx 阅读(282) 评论(0) 推荐(0)
摘要:/************************************************************************* > File Name: treedir.c > Author: KrisChou > Mail:zhoujx0219@163.com > Created Time: Tue 19 Aug 2014 05:04:50 PM CST ****... 阅读全文
posted @ 2014-08-19 23:36 Acjx 阅读(373) 评论(0) 推荐(0)
摘要:头文件 #ifndef __FUNC_H__#define __FUNC_H__#include #include #include #include #include #include #include #include #include #include #define ENT_CNT 128 #define FILE_LEN 256int get_file_name(DIR* pdir... 阅读全文
posted @ 2014-08-19 23:18 Acjx 阅读(382) 评论(0) 推荐(0)
摘要:1 目录操作 改变目录或文件的访问权限 #include int chmod(const char *path, mode_t mode); //mode形如0777path参数指定的文件被修改为具有mode参数给出的访问权限。当修改权限成功返回0,修改失败返回-1。(man 2 chmod)获取当前目录#include char *getcwd(char *buf, size_t size); ... 阅读全文
posted @ 2014-08-19 15:10 Acjx 阅读(334) 评论(0) 推荐(0)
摘要:1 文件描述符 内核为每个进程维护一个已打开文件的记录表(实现为结构体数组),文件描述符是一个较小的正整数(0—1023)(结构体数组下标),它代表记录表的一项,通过文件描述符和一组基于文件描述符的文件操作函数,就可以实现对文件的读、写、创建、删除等操作。 常用基于文件描述符的函数有open(打开)、creat(创建)、close(关闭)、read(读取)、write(写入)、ftruncate... 阅读全文
posted @ 2014-08-18 13:07 Acjx 阅读(1824) 评论(0) 推荐(0)