资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

linux中oc命令详解 linux o命令

OC中extern、static、const和宏定义

基础知识:(参考Henry725的博客)

创新互联公司坚信:善待客户,将会成为终身客户。我们能坚持多年,是因为我们一直可值得信赖。我们从不忽悠初访客户,我们用心做好本职工作,不忘初心,方得始终。十多年网站建设经验创新互联公司是成都老牌网站营销服务商,为您提供成都网站设计、成都网站建设、网站设计、H5建站、网站制作、品牌网站建设、成都微信小程序服务,给众多知名企业提供过好品质的建站服务。

extern用于变量的声明,告诉编译器:已经存在一个全局变量,但是不在当前的编译单元内,需要连接的时候在其他编译单元中寻找。

修改变量作用域为当前编译单元,变量生命周期不变;

避免重复定义全局变量

2.2. 修饰局部变量 -

修改变量的生命周期为整个工程周期,变量作用域不变

const修饰右边的变量,用来限制变量为只读属性。

在程序的预编译阶段进行替换处理。

区别:

1.define宏是在预处理阶段展开。

const常量是编译运行阶段使用。

2.define不做检查,不会报编译错误,只是替换。const会编译检查,会报编译错误

3.define在展开的时候才分配内存,展开几次分配几次内存。const在定义的时候会分配一次内存到静态区,使用时不重复分配

4.define可以定义一些简单的运算函数

声明一个只读的静态变量

在多个文件中经常使用的同一个全局变量。

使用场景:

1、.h文件中声明

2、.m文件中赋值

这里直接访问即可,都不用放到.pch文件中,因为默认权限是internal

public : 最大权限,可以在当前framework和其他framwork中访问;

internal : 默认权限,可以在当前framework中随意访问;

private : 私有权限,只能在当前文件中访问;

一般常量的话,都用extern const 来代替define。

因为一旦定义#define的方式,整个工程将被重新编译,这样带来的时间浪费可想而知

当然了很多情况还是代替不了的,一般定义常量的时候是应该使用这种方式来定义,不过也只是常量宏不被推荐,但是类函数宏用的还是很方便的,

const、#define的优缺点

编译器可以对const进行类型安全检查。而对#define只进行字符替换,没有类型安全检查,并且在字符替换可能会产生意料不到的错误。

这种情况还可能出现以下错误

Sending 'const NSString *__strong' to parameter of type 'NSString *' discards qualifiers

原因是需要 NSString* 的地方使用了 const NSString*

.h中 extern const NSString* 替换为 extern NSString* const

.m中 const NSString* 替换为 NSString* const

解释:前者相当于指针本身不可修改,后者表示指针指向的内容不可修改,两者的作用都是使字符串只可读不可写。

oc指令是啥意思航天

OC指令是“Orbital Command”的缩写,它是一种用于控制太空船只的指令。OC指令可以用来控制航天器的航向、速度、加速度和姿态,以及航天器的起降、悬停和轨道调整等。OC指令还可以用来控制航天器的传感器、系统和设备,以及航天器的通信、导航和控制系统。OC指令可以用来控制航天器的运行状态,以及航天器的环境参数,如温度、湿度、压力和放射性能等。OC指令还可以用来控制航天器的燃料消耗、推力和轨道变化等。总之,OC指令是用来控制航天器的一种重要指令,它可以帮助航天器实现其设定的任务。

在linux系统中OC编程如何实现字符串连接

 由于Xcode对中文支持良好,所以在开发过程中经常直接使用中文字符串。

不过苹果推荐多语言化,需要为中文字符串添加个NSLocalizedString宏。

#!/usr/bin/python

# -*- coding: utf-8 -*-

'''''

Localization The Objective-C Code

@"..." -- NSLocalizedString(@"...", nil)

Jason Lee 2012-03-01

'''

import os, sys

import re

import codecs

targetPattern = pile('@"[^"]+"')

global newFile, newFilePointer

def isChineseCharacter(ch):

return0x4e00 = ord(ch) = 0x9fa5

def hasChineseCharacter(str):

for char in str:

if isChineseCharacter(char):

returnTrue

returnFalse

def buildNewString(oldStr):

newStrPrefix = 'NSLocalizedString('

newStrSuffix = ', nil)'

newStr = newStrPrefix + oldStr + newStrSuffix

return newStr

def processLine(line):

global newFile, newFilePointer

matchResult = targetPattern.findall(line)

for result in matchResult:

if hasChineseCharacter(result):

#print result, buildNewString(result)

p = pile(result)

line = p.sub(buildNewString(result), line)

newFilePointer.write(line)

def processFile(filename):

#Xcode file is saved with utf-8

global newFile, newFilePointer

newFile = 'Replaced.' + filename

newFilePointer = codecs.open(newFile, 'wb', 'utf-8')

fp = codecs.open(filename, 'rb', 'utf-8')

for line in fp:

processLine(line)

fp.close()

newFilePointer.close()

oldFile = 'Old.' + filename

os.system('mv ' + filename + ' ' + oldFile)

os.system('mv ' + newFile + ' ' + filename)

#os.system('rm -f ' + oldFile)

if __name__ == "__main__":

if len(sys.argv) 1:

output = os.popen('ls ' + sys.argv[1]).read()

filelist = re.split('\n', output)

filelist = filelist[:-1]

#print filelist

print'Localizing...'

for file in filelist:

if os.path.exists(file):

try:

#print 'Processing File :', file

processFile(file)

except Exception as e:

print e

print'Localization Done.'

之后需要做的事情参考:

代码没用经过严格验证,请慎用。起码,没有检查该字符串是否已经加了NSLocalizedString宏。

新手的OpenShift oc命令

有一天,我发现这篇关于 bash 帖子。如果您是专业用户,您可能已经知道所有这些技巧,但如果您是新手或不是这样的专业用户,那么该帖子很可能是您的一天。

我认为为 oc 命令创建类似的帖子会很有用。 oc 命令是dope,每个人都应该知道。它设计精良,一致,灵活,正如您将看到的,有许多值得尝试的隐藏功能。

如果您是OpenShift专业人士,您可能已经知道我将在这里揭示的大部分内容; 否则,如果您刚开始使用OpenShift,或者您不是经验丰富的用户,这将为您节省一些宝贵的时间。

当我不知道发生了什么或者我收到了不友好的错误消息时,我总是使用该标志 --loglevel 。它将日志级别信息写入stderr。根据日志级别,您将获得curl API Rest调用,、API Rest正文答案,甚至更详细的信息。

如果要修补OCP对象,loglevel 9非常方便,因为它显示了您需要应用的补丁(API请求体)。

假设您要更改服务对象的标签,在本例中标签为“app:hello-jorge”。

注意: 在绝望的时刻,你总是可以添加任意数量的9,结果将只有一个9,但你可能会感到宽慰。

是的,你没有看错。您可以替换正在运行oc命令的用户,或者在OCP术语中,您可以 "模拟"(impersonate ) 用户。显然,如果你有足够的权限进行模拟, 那么你只需要使用flag --as 。

例如:

此外,可以进行组模拟,而不是用户模拟:

在许多情况下,它非常方便快捷,例如,检查用户是否可以执行特定操作或检查用户在运行oc时将收到的输出。在搞不清角色和权限时,它也很有用。

oc whoami 命令众所周知,特别是加上flag -t 用于获取当前用户/会话的持有者令牌。但是当你有一个令牌并且你不知道谁是所有者时会发生什么?

您可以做的一件事是使用令牌登录OpenShift,然后执行 oc whoami ...等待一秒钟。 oc whoami 会给你这个信息!只需在命令行中传递令牌作为第3个参数,不需要任何标志。

试试看:

你可以运行一个pod并获得一个shell。有时获取正在运行的pod配置的副本并使用shell对其进行故障排除很有用。这是默认行为。

介绍下 oc debug 选项,您可以以root用户, 或任何其他用户ID身份运行容器,强制它在特定节点中运行各种命令。

您必须针对有效的 dc 运行命令,例如:

OpenShift / k8s对象有时很复杂,有很多字段。很多时候,我最终在OCP文档或其他来源中寻找对象定义示例。在涉及OCP / k8s对象定义时,您可以考虑用 oc explain 作为可信来源。

oc explain 为您提供资源及其字段的文档。在声明新的OCP对象时,或者当您无法访问官方OCP文档时,它非常有用。

例如,您可以获取pod文档和pod spec affinity字段描述:

关于oc命令的一个非常酷的事情是它具有格式化输出的内置功能。我们都知道 -o json 或者 -o yaml ,但flag -o 为您提供了许多其他可能性。

在我发现的所有这些输出选项中, go-template 和 jsonpath 是最强大的输出选项:

例如,假设您想要获取特定路由(router)(docker registry router)所公开的服务(service):

或者您想了解路由器DC的部署策略:

如您所见,oc命令非常棒。我鼓励你继续玩它,因为这是OpenShift最酷的事情之一。

Jorge Tudela Gonzalez de Riancho在红帽西班牙工作,担任云顾问,专门研究OpenShift和容器相关技术。


分享名称:linux中oc命令详解 linux o命令
URL地址:http://cdkjz.cn/article/dohcdpe.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

大客户专线   成都:13518219792   座机:028-86922220