当前位置: 首页 > news >正文

pdf动态网站开发怎么做网络营销平台

pdf动态网站开发,怎么做网络营销平台,云南网站建设找天软,企业免费自助建站系统一: 简介 在类linux系统中管道分为有名管道和匿名管道。两者都能单方向的跨进程通信。 匿名管道(pipe): 必须是父子进程之间,而且子进程只能由父进程fork() 出来的,才能继承父进程的管道句柄,一般mac 开发…

一: 简介

在类linux系统中管道分为有名管道和匿名管道。两者都能单方向的跨进程通信。

  • 匿名管道(pipe): 必须是父子进程之间,而且子进程只能由父进程fork() 出来的,才能继承父进程的管道句柄,一般mac 开发用的很少。
  • 有名管道(fifo)又叫命名管道: 可以在同一台机器,没有关系的进程间通信。 其本质是本地创建一个文件,然后使用其路径作为纽带。 open后再内核空间产生管道,不同进程之间分别连接管道的读和写的端口进行通信。

这里主要针对有名管道进行研究。

二:主要函数

以下函数在macOSLinux 下均适用。 Windows不行,其创建的关键函数是:CreateNamedPipe(...)

1. int mkfifo(const char *, mode_t);

第一个参数是路径,可以放在tmp路径下,比如const char *fifoName = "/tmp/com.jimbo.fifo";
mode_t代表赋予的权限,测试用0777就可以了。


运行 ls -la /tmp/ 下,明显存在我们创建的管道文件。
有名管道会在 在第一列将会显示类型 s
这里还有其他类型的文件。其中p表示命名管道文件,d表示目录文件,l表示符号连接文件,-表示普通文件,s表示socket文件,c表示字符设备文件,b表示块设备文件。
在这里插入图片描述

2. int open(const char *, int, ...)

  • 返回值为,打开的管道的操作句柄,读写都需要它
  • 第一个参数是路径,同上
  • 第二个参数为打开模式:
#define O_RDONLY        0x0000          /* open for reading only */ 只读
#define O_WRONLY        0x0001          /* open for writing only */ 只写
#define O_NONBLOCK      0x00000004      /* no delay */				不阻塞
...

demo主要使用上面三种模式,

  • 发送端使用O_WRONLY
  • 接收端使用O_WRONLY
  • O_NONBLOCK代表open文件的时候,这个方法是否需要阻塞,默认不传是阻塞的.

3. ssize_t read(int, void *, size_t)

往管道读取数据。常规操作,传入open后的返回句柄,和字符串地址和最大长度

4. ssize_t write(int __fd, const void * __buf, size_t __nbyte)

往管道写入数据。常规操作,传入open后的返回句柄,和字符串地址和字符串长度

三:demo代码

如下图,创建了两个app,分别为发送端(写数据)和接收端(读数据)。
macOS App 来说貌似需要双方都是 非沙盒的才行。 不然文件访问不了。
在这里插入图片描述

1. 发送端主要逻辑

  • 主要创建了mkfifo一个管道

  • 创建了子进程

  • open() 阻塞式的等子进程打开管道文件

  • 上一步阻塞过了后,点击writeMsg往管道中写入消息。

主要代码: ViewController.mm 文件代码

//发送端
#import "ViewController.h"
#include <sys/unistd.h>
#include <sys/stat.h>static const char *fifoName = "/tmp/com.jimbo.fifo";@implementation ViewController- (void)viewDidLoad {[super viewDidLoad];[self.view.window setTitle:@"Main window"];int ret = 0;if (access(fifoName, F_OK) == -1) {//管道不存在,创建一个新的ret = mkfifo(fifoName, 0777);if (ret != 0) {NSLog(@"mkfifo failed! ret:%i", ret);return;}}//启动子进程NSString *subAppp = [[NSBundle mainBundle] pathForResource:@"PipeApp_Sub" ofType:@"app"];subAppp = [NSString stringWithFormat:@"%@/Contents/MacOS/PipeApp_Sub", subAppp];NSTask *task = [[NSTask alloc] init];[task setLaunchPath:subAppp];NSError *error;[task launchAndReturnError:&error];//阻塞监听子进程打开 读端。self.writePipeID =  open(fifoName,O_WRONLY);printf("open fd:%i\n", self.writePipeID);if(self.writePipeID<0){perror("writer open err");return ;}
}- (IBAction)writeMsg:(id)sender {//往管道发送消息,消息为ui的文本框的数据const char *text = [self.textLabel.stringValue UTF8String];ssize_t writeSize =  write(self.writePipeID, text, strlen(text)+1);NSLog(@"write succed size:%zi", writeSize);
}

2. 接收端主要逻辑

  • 收到非阻塞的O_NONBLOCK 打开只读管道,(打开后发送端的阻塞会通过)

  • 等到发送端发送了数据后。。。

  • 点击接收数据的按钮receiveMsg, read()函数读取管道中的数据,并显示在ui的textView

//接收端
#import "ViewController.h"
#include <sys/stat.h>@interface ViewController()
@property (nonatomic, assign) int pipeReadID;
@property (unsafe_unretained) IBOutlet NSTextView *textView;@end@implementation ViewController- (void)viewDidLoad {[super viewDidLoad];const char *fifoName = "/tmp/com.jimbo.fifo";// 由于是ui 主线程,所以选择了 非阻塞式的打开 管道self.pipeReadID = open(fifoName, O_RDONLY | O_NONBLOCK);if (self.pipeReadID < 0) {NSLog(@"open 失败了");self.textView.string = @"open 失败了";} else {self.textView.string = @"点击接收按钮,接收数据";}
}- (IBAction)receiveMsg:(id)sender {size_t n;char line[PIPE_BUF+1];n = read(self.pipeReadID, line, PIPE_BUF);NSLog(@"count:%zu get msg: %s", n ,line);if (n > PIPE_BUF || n < 0) {return;}self.textView.string = [NSString stringWithFormat:@"收到的数据:%@", [[NSString alloc] initWithBytes:line length:n encoding:NSUTF8StringEncoding]];
}- (void)dealloc {close(self.pipeReadID);
}@end
http://www.dt0577.cn/news/25465.html

相关文章:

  • 资讯型电商网站优缺点网络营销在哪里学比较靠谱
  • 免费企业网站建设一键免费创建论坛网站
  • 整形网站开发专业网站制作网站公司
  • 做网站有意思吗?谷歌浏览器网页版入口手机版
  • 做外贸必须建网站吗百度客服人工电话24小时
  • 江阴网站优化湖南seo推广多少钱
  • 加强政府信息公开和网站建设北京seo顾问推推蛙
  • 网站开发 平面设计搜索引擎优化简称
  • 免费做qq互赞网站新闻最新消息今天
  • 江西网站开发多少钱2023年最新新闻摘抄
  • o2o商城网站开发seo网站优化论文
  • 做的好详情页网站外贸平台有哪些
  • 宁波网站设计热点时事新闻
  • 建立公司网站需要什么搜索引擎优化网站排名
  • 网站如何在百度网络营销发展现状与趋势
  • 做网站用什么框架好seo外包一共多少钱
  • 政府网站等保建设方案二级网站统计数据分析
  • 内蒙古网站seo2020国内十大小说网站排名
  • 青岛网站建设公司怎么选长沙网站制作费用
  • html怎么弄成网站谷歌paypal官网注册入口
  • 做项目搭建网站 构建数据库软文营销的经典案例
  • 网站开发工程师工作内容百度关键词排名批量查询工具
  • 旅游网站开发价格中国培训网的证书含金量
  • 网站正在建设中 html代码关键词优化排名seo
  • 哈尔滨建设厅网站整合营销传播工具有哪些
  • wordpress主题模板仿北京百度搜索排名优化
  • 英文网站开发公司网站做外链平台有哪些
  • wordpress导航页怎么样做免费的百度seo
  • alexa的网站排名主要分为哪两种推广网
  • 看手机的网站保定seo排名优化