摘要:
在上一篇博文中,我们的程序中我们有3个客户端,因此也事先建立了3个管道,每个客户端分别使用一个管道向服务器发送消息。而在服务器端使用select系统调用,只要监测到某一管道有消息写入,服务器就将其read,并显示在标准输出上。 本篇文章,我们会让服务器拥有一个管道,专门用于从客户端接收消息(上线通知,发送需要服务器转发的消息以及下线通知)。服务器需要维护一个列表(使用结构体),记录哪些用户已经连上... 阅读全文
摘要:
SYNOPSIS /* According to POSIX.1-2001 */ #include /* According to earlier standards */ #include #include #inclu... 阅读全文
摘要:
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... 阅读全文
摘要:
1 基于文件指针的数据读写基于文件指针的数据读写,通常为标准函数,在Windows与Linux下,均可以使用。数据块读写NAME fread, fwrite - binary stream input/outputSYNOPSIS #include size_t... 阅读全文
摘要:
int ch;while( (ch = getchar()) != EOF ){ putchar(ch);}执行程序,输入:we are the,然后回车。运行结果如下:[purple@localhost 0822]$ ./a.outwe are thewe are the注意光标位置是在最后一行空白行上,以及getchar是接收空格以及\n的。即执行程序,输入:we are the,然后回... 阅读全文
摘要:
编程实现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个进程用于分别接... 阅读全文
摘要:
编程实现双方通信 思路 用户A 用户B 写 (管道) 读 读 (管道) 写 在之前有名管道的博文中,实现的双方一发一收即为上图所描述的。建立两条管道,一条负责由A传消息给B,另一条负责由B发消息给A。 当用户A发消息给B时,B可以立即读到消息。此时A的read为阻塞,必须等到用户B发消息给A,A读到消息后,A才可以继续发消息给B。即之前博文的程序,无法实现A连续发送消息给B。 因此在这篇文章中,我... 阅读全文
摘要:
用有名管道实现进程A与进程B消息一发一送 程序a.c /************************************************************************* > File Name: a.c > Author: KrisChou > Mail:zhoujx0219@163.com > Created Time: Fri 22 Aug 2014... 阅读全文
摘要:
在讨论匿名管道之前,我们先回顾下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... 阅读全文
摘要:
/************************************************************************* > File Name: Kris_shell.c > Author: KrisChou > Mail:zhoujx0219@163.com > Created Time: Thu 21 Aug 2014 04:31:55 ... 阅读全文
摘要:
1. 引言 一个程序是存储在文件中的机器指令序列。一般它是由编译器将源代码编译成二进制格式的代码。运行一个程序意味着将这个机器指令序列载入内存然后让处理器(cpu)逐条执行这些指令。 在Unix术语中,一个可执行程序是一个机器指令及其数据的序列。一个进程是程序运行时的内存空间和设置。 数据和程序存储在磁盘文件中,程序在进程中运行。 2. ps 进程存在于用户空间。用户空间是存放运行的程序和它们的数... 阅读全文
摘要:
/************************************************************************* > File Name: treedir.c > Author: KrisChou > Mail:zhoujx0219@163.com > Created Time: Tue 19 Aug 2014 05:04:50 PM CST ****... 阅读全文
摘要:
头文件 #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... 阅读全文
摘要:
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); ... 阅读全文
摘要:
1 文件描述符 内核为每个进程维护一个已打开文件的记录表(实现为结构体数组),文件描述符是一个较小的正整数(0—1023)(结构体数组下标),它代表记录表的一项,通过文件描述符和一组基于文件描述符的文件操作函数,就可以实现对文件的读、写、创建、删除等操作。 常用基于文件描述符的函数有open(打开)、creat(创建)、close(关闭)、read(读取)、write(写入)、ftruncate... 阅读全文
摘要:
原题 设任意n个整数存放于数组A中,编写程序,将所有整数排在所有负数前面。 思路 题目超级水,直接上代码了。 实现代码 /************************************************************************* > File Name: testmain.c > Author: KrisChou > Mail:zhoujx... 阅读全文
摘要:
原题 N个人围成一个圆圈,首先第一个人从1开始一个人一个人顺时针报数,报道第m个人,令其出列。然后再从下一个人开始,从1顺时针报数,报到第m个人,再令其出列,…如此下去,直到圈中只剩下一个人为止。此人即为优胜者。写一个函数求N个人中的胜者。 我的思路 可以使用一数组,来存放标记为1,2,3,…,N的N个人,每当有人出列,对应数组元素置为0,下次报数遇到置0的数组元素直接跳过。 实现代码 /****... 阅读全文
摘要:
原题 打印魔方阵,魔方阵是指这样的方针,每一行、每一列以及对角线的和相等。例如三阶魔方阵: 8 1 6 3 5 7 4 9 2 编程打印奇数阶魔方阵。 提示 问题解决的关键是元素的填充,第一个元素1的位置在第一行正中,新的位置应该处于最近插入元素的右上方;但如果右上方的位置超出方针上边界,则新的位置应该取列的最下一个位置;超出右边界则取行的最左的一个位置;若最近插入的元素为n的整数倍,则选下面一行... 阅读全文
摘要:
原题 自然数采用蛇形排列方式填充到数组中。将自然数1、2、3…、N*N逐个顺序插入方阵中适当的位置,这个过程沿斜列进行。将斜列编号为0、1、2…、2n(以i标记,n=N-1),如下面的数据排列,这个排列为蛇形排列。 1 3 4 10 2 5 9 11 6 8 12 15 7 13 14 16 我的思路 观察以下坐标: (0,0) 和为0 (1,0) (0,1) 和为1 (0,2) (1,1... 阅读全文
摘要:
原题 找出一个字符串中最长重复次数的子字符串,并计算其重复次数。例如:字符串“abc fghi bc kl abcd lkm abcdefg”,并返回“abcd”和2。 我的思路 为了方便表述,我们使用变量src作为原字符串,sub_str作为子字符串。 由于题目要求寻找至少重复2次的最长的子字符串,重点在于最长的子字符串,而不在于重复的最多次数。因此我们可以从长度最长的字符串入手,计算其重复次数... 阅读全文