Kaydet (Commit) 9464ac73 authored tarafından Gürer Özen's avatar Gürer Özen

düzenleme.

üst 32b81a26
#include <stdio.h>
#include <unistd.h>
#include <locale.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
#include <sys/ipc.h>
#include <sys/shm.h>
int file;
int stdio_read, stdio_write, semid, shmid;
char *shmbuffer;
key_t shmkey;
void read_process(int sig) {
}
void write_process(int sig) {
}
int main(int argc, char **argv) {
char filename[1024];
char oldfname[1024];
struct stat st;
int i, x;
int extflags = 0;
if (argc != 3) {
perror("FIFO/DEVICE to STDIO Bridge for COMAR Applications.\nPlease read COMAR Documentation for details\nUsage:\n\tfifo2stdio shm_key filename\nStatus:");
return 1;
}
setlocale(LC_ALL, "POSIX");
if (lstat(argv[2], &st)) {
perror("File cannot stat");
return errno;
}
strncpy(filename, argv[2], 1024);
strncpy(oldfname, filename, 1024);
while (S_ISLNK(st.st_mode)) {
/* Symlink */
i = readlink(oldfname, filename, 1024);
if (i == -1) {
perror("Cannot stat symlink ");
return errno;
}
filename[i] = 0;
if (filename[0] != '/') {
x = strlen(oldfname) - 1;
while (x--) {
if (oldfname[x] == '/') {
x++;
oldfname[x] = 0;
break;
}
}
strncat(&oldfname[x], filename, 1024);
} else {
strncpy(oldfname, filename, 1024);
}
printf("FSTAT: %s\n", oldfname);
if (lstat(oldfname, &st)) {
printf("FN: %s\n", oldfname);
perror("Broken Symlink ");
return errno;
}
}
if (S_ISREG(st.st_mode) || S_ISDIR(st.st_mode) || S_ISBLK(st.st_mode)) {
perror("Regular Files/Block Devices cannot be used with fifo2stdio ");
return 1025;
}
extflags |= O_ASYNC;
printf("ST DEV: %d ST RDEV: %d\n", st.st_dev, st.st_rdev);
extflags |= O_NOCTTY;
printf("Open File: %s\n", oldfname);
/* Test SHMEM Segment for exist ? */
shmkey = atoi(argv[1]);
printf("Seek SHM Segment: %d\n", shmkey);
shmid = shmget(shmkey, 4096, 0666);
printf("SHMGET Returned: %d\n", shmid);
if (shmid == -1) {
perror("Cannot open IPC Segment ");
return 1026;
}
semid = semget(shmkey, 0, 0666);
if (shmid == -1) {
perror("Cannot open IPC Semaphore ");
return 1027;
}
daemon(0,0);
}
CSL Fonksiyonlar
CSL, temel olarak iki farkl fonksiyon seti sunar. CSL API, deikenleri ve deerleri ilemek iin gerekli olan temel fonksiyonlar ierir. CSL CAPI ise, dosya eriimi, program altrma gibi sistem kaynaklarna eriim gerektiren fonksiyonlar sunar. CSL CAPI fonksiyonlar, eriim kontrolne tabidir.
CSL API:
1. Numeric fonksiyonlar:
getbit
Prototype:
bit_value = numeric_var.getbit(bit = position);
bit_value = getbit(value = look_value, bit = position);
Description:
"value" iin "bit" pozisyonundaki bitin deerini dndrr. Position, LSB'de 0 ile balayp MSB'ye doru artar.
Sample:
x = getbit(value = 255, bit = 0); # Look bit 0 in 11111111b, return 1
x = getbit(value = 176, bit = 0); # Look bit 0 in 10101010b, return 0
x = getbit(value = 176, bit = 1); # Look bit 0 in 10101010b, return 1
getnearvalue
Prototype:
near_value = array_value.getnearvalue(look = numeric);
near_value = getnearvalue(array = array_value, look = numeric);
Description:
array_value, key deerleri baklacak saylarla, her keyin karl ise geri dndrlecek saylarla dolu olan bir array olmaldr. Fonksiyon bu array'n keylerine bakarak, istenen look deerine en yakn olan elemann deerini dndrr.
Sample:
arr[100] = "A";
arr[150] = "B";
arr[175] = "C";
arr[190] = "D";
val = arr.getnearvalue(value = 130); # val = "B"
val = arr.getnearvalue(value = 120); # val = "A"
val = getnearvalue(array = arr, value = 180); # val = "C"
int
Prototype:
val = numeric_var.int();
val = int(value = numeric_var);
Description:
numeric_var'n tamsay deerini dndrr. Yuvarlama her zaman alta doru yaplr.
Sample:
x = 5.75;
y = x.int(); # y = 5
y = int(value = 10.1); # y = 10
array ve string fonksiyonlar
arraygrep
Prototype:
values = array_value.arraygrep(pattern = pattern_string);
values = arraygrep(array = array_value, pattern = pattern_string);
Description:
array_value'nun deerlerinden, pattern_string'i ihtiva edenlerin keylerini yeni bir array olarak dndrr.
Sample:
arr[0] = "foo bar";
arr[1] = "no bar";
arr[2] = "foo";
arr[3] = "bar";
keys = arr.arraygrep(pattern = "oo"); # keys["000000"] = 0, keys["000001"] = 2
keys = arraygrep(array = arr, pattern = " "); # keys["000000"] = 0, keys["000001"] = 1
Notes:
CSL iinde, "000000" ile 0, "000001" ile 1 array indexi olarak birbirine eittir. Yukardaki rnek iin, keys[0] ile keys["000000"] ayn elemanlardr.
replacetokens
Prototype:
result_buffer = source_buffer.replacetokens([tokenid = token_char], fields = fields_array);
result_buffer = replacetokens(buffer = source_buffer, [tokenid = token_char], fields = fields_array);
Description:
source_buffer iersindeki fields_array'n keyleri ile tarif edilmi olan fields'leri, fields_array'n eleman deeri ile deitirip, sonucu geri dndrr.
fields_array, her eleman iin, key = baklacak pattern, value = yeni deer eklinde bir arraydr. Burada pattern deerinde ASCII olarak A-Z aras byk/kk harfler, 0-9 aras saylar ve "_" iareti kullanlabilir.Bu kstlama operasyon iin yeterli olmasna ramen, eer dier karakterler kullanlmak istenirse source_buffer iersindeki saha tanmlamalarnn ${..} formatnda yaplmas gerekir. Bu durumda, bilhassa UTF-8 -> ISO8859* evrimleri gibi sorunlarn doabilecei gzden karlmamaldr.
tokenid, patternlerin baladn belirten zel karakterdir. Varsaylan deeri "$" eklindedir. source_buffer iersinde, bu tokenid karakteri ard ardna iki kere yazlrsa, bu noktada pattern aramas yaplmaz, bir tek tokenid bu pozisyona yerletirilir.
Bir token, source_buffer iinde <tokenid>field veya <tokenid>{field} eklinde bulunmaldr.
Sample:
field["height"] = 640;
field["width"] = 800;
buffer1 = "Area = $height x $width";
buffer2 = "$$Area=${height}x${width}";
result = buffer1.replacetokens(fields = field, tokenid = "$"); # result -> "Area = 640 x 800"
result = replacetokens(buffer = buffer2, fields = field, tokenid = "$"); # result -> "$Area=640x800"
strupper/strlower
Prototype:
new_string = string_value.strupper();
new_string = string_value.strlower();
new_string = strupper(string = string_value);
new_string = strlower(string = string_value);
Description:
strupper, string_value'yu tm harfleri byk harfe, strlower ise kk harfe evirip dndrr. evrim, yerel dile baml olarak yaplr.
Sample:
str = "ali";
up = str.strupper(); # up -> "AL"
low = strlower(string = up); # low = "ali"
strip
Prototype:
new_string = string_value.strip();
new_string = strip(string = string_value);
Description:
string_value'nun banda ve sonunda bulunan beyaz boluklar kaldrr.
Sample:
str = "\t \tali\n\t";
str = str.strip(); # str = "ali"
startswith
Prototype:
bool_numeric = string_value.startswith(prefix = prefix_string);
bool_numeric = startswith(string = string_value, prefix = prefix_string);
Description:
Eer string_value, prefix_string ile balyorsa, geriye 1, aksi durumda, 0 dndrr.
Sample:
str = "foo bar foobar";
b = str.startswith(prefix = "fo"); # b = 1
b = startswith(string = str, prefix = "bar"); # b = 0
split/splitws
Prototype:
new_string = string_value.split(separator = sep_string);
new_string = string_value.splitws();
new_string = split(string = string_value, separator = sep_string);
new_string = splitws(string = string_value);
Description:
split, string_value'yu her biri sep_string ile ayrlan blmlere ayrp, bu blmleri bir array olarak geri dndrr. splitws, separator olarak "\t", "\n" ve " " karakterlerini kullanr. Dier baz dillerde, ardarda gelen separatorler iin, bo deerler retilirken, CSL iin bu deerler ihmal edilir.
Sample:
str = "foo bar\tfoobar\t\t barfoo";
arr = str.split(separator = " ");
# arr[000000] = "foo", arr[000001] = "bar\tfoobar\t\t", arr[000002] = "barfoo"
arr = str.splitws();
# arr[000000] = "foo", arr[000001] = "bar", arr[000002] = "foobar", arr[000003] = "barfoo"
strlen
Prototype:
num = string_value.strlen();
num = strlen(string = string_value);
Description:
string_value'nun karakter cinsinden uzunluunu verir. UTF-8 gibi bir karakterin birden fazla bayt kaplad durumlarda, bu tr karakterler tek karakter olarak yorumlanr. String'in buffer olarak boyunu renmek zere, bytelen() fonksiyonu kullanlabilir.
Sample:
str = "123";
len = str.strlen(); # len -> 3
strstr/strcasestr
Prototype:
bool = string_value.strstr(pattern = pattern_string);
bool = string_value.strcasestr(pattern = pattern_string);
bool = strstr(string = string_value, pattern = pattern_string);
bool = strcasestr(string = string_value, pattern = pattern_string);
Description:
Eer, string_value iersinde pattern_string varsa, geriye 1 dndrrken aksi durumda 0 dndrr. strcasestr iin ilem byk/kk harf ayrm yaplmakszn gerekleir.
Sample:
str = "foo bar foobar barfoo";
x = str.strstr(pattern="foobar"); # x = 1
x = str.strstr(pattern="FOOBAR"); # x = 0
x = str.strcasestr(pattern="FOOBAR"); # x = 1
x = str.strstr(pattern="other"); # x = 0
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment