Вт, 26.11.2024, 10:46
Приветствую Вас Гость | RSS
Главная | Це под z/OS - Страница 2 - Форум | Регистрация | Вход
Форма входа
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 2 из 2
  • «
  • 1
  • 2
Це под z/OS
XOpenДата: Чт, 20.08.2009, 14:12 | Сообщение # 16
Генерал-майор
Группа: Администраторы
Сообщений: 325
Репутация: 4
Статус: Offline
Quote (akost)
А что это вы делаете? Вырезали строчку - и чего? Нафига символы в шестнацетеричный вид, потом - в десятичный? Это все зачем?

Представь, что я получил строку, часть которой является шестнадцатиричным числом и хочу прибавить 5 например.

var0='TRK=0D5F'
var1=SUBSTR(var0,5,4) <== или var1='0D5F'
var2=var1+5

получаем: Error running TESTPGM, line 3: Bad arithmetic conversion

Тоесть нету способа (если вы мне не расскажете) работать с 0x числами напрямую. Фактически у Рекса один тип - строка. А мы через функции пытаемся задать тип. Функция + будет думать, что строка число, но обязательно десятичное. Значит мне надо перевести мою строку(типа 16 типа) в строку(10 типа). Как ??

var3=C2X(var1) <== получаем var3='C4F0F5F6' , смешно, да ? Кстати, var3='0D5F'x делает совсем другое. Строку из 2 байтов, к которым тоже ничего прибавить не дадут.

И наконец var4=X2D(var3) даст строку(которая выглядит как 10е число) и к нему можно что то прибавить.

Да, мне не повезло с входными данными. Но заставлять меня 2 раза перетиповывать данные, вместо того, чтобы дать с ними работать как с без-типовыми данными... это... (слов нет или как минимум РЕКС не является языком с без типовыми данными)

Уж скорее Си является таким языком, где всё - это область памяти, а вы как хотите, так и используйте:
char var1='A';
short var2=var1+5;
long var3=(char)var2;
printf("%X",var1);

и тд. Фактически это не типы данных, это то, во что должен превратиться кусок памяти в данный момент.


Худая корова еще не газель!
 
slДата: Пт, 28.08.2009, 17:43 | Сообщение # 17
Лейтенант
Группа: Проверенные
Сообщений: 55
Репутация: 0
Статус: Offline
Господа, стандартно прошу простить за серость...
Вот ежели программа на C работает под CICSом, что будет возвращать getpid() ?
Вернее, мне пофигу что он будет возвращать, вопрос так стоит: даст ли он мне уникальный идентификатор задачи ? Или лучше какой-то другой функцией пользоваться ?
(Тонкость: у меня нет никакой "обратной связи" - я отправлю программку по почте, а мне скажут либо "ОК", либо "х-ня" smile ; даже просто узнать версию z/OS - надо приложить недетские усилия, а о том чтоб поотлаживаться на целевой машине даже речи быть не может)
 
XOpenДата: Пт, 28.08.2009, 19:35 | Сообщение # 18
Генерал-майор
Группа: Администраторы
Сообщений: 325
Репутация: 4
Статус: Offline
Эээ... Прямой ответ - вернет какое то число.

Теперь лирика.

90% юникс функций работают только под юникс. Ты должен явно или неявно запускать программу в самом USS. Неявно, это когда указываешь специальный параметр POSIX(ON). getpid() вроде как типа работает и в z/OS, но что за число он возвращает - я понятия не имею. Потому что в z/OS нет понятий потоков, им нельзя посылать сигналы и тд... Разве что, произошел "dubbed" - неявное закидывание в юникс для некоторых функций(и тогда это реальный пид). Но большая часть функций требуют минимум указания опции выше.

Тоже и в CICS. СICS это не UNIX. Даже хуже. Официально USS не поддерживается под CICS. (В моем понимании опция POSIX(ON) там не доступна)

Пиши только то, что ISO C, тогда будет шанс.


Худая корова еще не газель!
 
  • Страница 2 из 2
  • «
  • 1
  • 2
Поиск: