日本的wiki有針對Lolita條目做詳細的解說,也順便介紹了一下目前的日本地區的品牌。很值得參考。
我還是最喜歡白,粉紅為基調lolita!
這是我在做測試時寫的一個關於local socket的範例。
由main產生child與parent這兩個process,然後parent作為server,child為client。由child向server發送資料,並由server印出在console上。
#include <stdarg.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/un.h>
#include <fcntl.h>
#include <sys/socket.h>
#include <errno.h>
#define SERVER "/home/mark/test/test_socket"
/* Open socket from local socket */
int openMsgSocket(){
int fd;
struct sockaddr_un name;
int fd_flags;
fd = socket(PF_LOCAL, SOCK_STREAM, 0);
//Set socket to non-block mode
fd_flags = fcntl(fd, F_GETFL, 0);
fcntl(fd, F_SETFL, fd_flags | O_NONBLOCK);
name.sun_family = AF_LOCAL;
strcpy(name.sun_path, SERVER);
bind(fd, &name, SUN_LEN(&name));
listen(fd, 5);
return fd;
}
/* Send message to local socket */
void sendMsg(char *msg_string){
int socket_fd;
struct sockaddr_un name;
socket_fd = socket(PF_LOCAL, SOCK_STREAM, 0);
name.sun_family = AF_LOCAL;
strcpy(name.sun_path, SERVER);
connect(socket_fd, &name, SUN_LEN(&name));
int i = write(socket_fd, msg_string, strlen(msg_string)+1);
if(i < 0){
printf("write error\n");
}
close(socket_fd);
}
/* Format string and call send message */
int debug(const char * __restrict format, ...){
char buf[512];
va_list arg;
int rv;
va_start(arg, format);
rv = vsprintf(buf, format, arg);
va_end(arg);
sendMsg(buf);
return rv;
}
int main (void){
unlink(SERVER);
pid_t chpid;
if ( (chpid = fork()) == (pid_t) -1 ) {
fprintf(stderr, "%s: fork(2)\n", strerror(errno));
exit(1);
} else if ( chpid == 0 ){
/* child */
printf("child start...\n");
sleep(5);
printf("child send msg 55555\n");
debug("55555");
printf("child send msg 666\n");
debug("666");
}else{
/* parent */
printf("parent start...\n");
int fd = openMsgSocket();
//int fd=5;
printf("parent open socket\n");
while(1){
int client_socket_fd;
struct sockaddr_un client_name;
int client_name_len;
int i;
char msg[512];
client_socket_fd = accept(fd, &client_name, &client_name_len);
if(client_socket_fd != -1){
if(i = read(client_socket_fd, &msg, sizeof(msg)) > 0){
printf("parent get msg %s\n", msg);
}
close(client_socket_fd);
}
}
}
return 0;
}
要注意的是,server端因為沒有使用select機制,會導致CPU利用率100%。如果真得要使用,請加上select機制。
參考資料:
[1] GNU C
動作類型。
這遊戲最可取的地方就是美術風格,還有 Alice會一直換可愛的衣服,我承認我是被這樣的風格吸引而去玩的。
而最失敗的地方是遊戲性,一直重複的關卡,還有從頭到尾的跳跳樂,老實說我還挺失望的。要收藏的許多支線要素,讓我浪費了不少時間順道去拿,最後也是沒有收集完就是了。
此外,遊戲的英文用詞好難,且對話之間大多不連續,我其實都不知道在演什麼!
如果關卡冗餘設計能再刪減許多,才會比較好玩吧~。
這是參考自Jeff隨手記。我將他稍作修改可以讓Key與initial vector可以直接吃字串。解密失敗時會產生exception,可以作為檢測該密碼是否合法。
public string EncodeString(string EnString){
byte[] Key = Encoding.UTF8.GetBytes("xxxxxxxx");
byte[] IV = Encoding.UTF8.GetBytes("yyyyyyyy");
byte[] b = Encoding.UTF8.GetBytes(EnString); DESCryptoServiceProvider des = new DESCryptoServiceProvider();
ICryptoTransform ict = des.CreateEncryptor(Key, IV);
byte[] outData = ict.TransformFinalBlock(b, 0, b.Length);
return Convert.ToBase64String(outData);
}
public string DecodeString(string DeString){ byte[] Key = Encoding.UTF8.GetBytes("xxxxxxxx");
byte[] IV = Encoding.UTF8.GetBytes("yyyyyyyy");
byte[] b = Convert.FromBase64String(DeString);
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
ICryptoTransform ict = des.CreateDecryptor(Key, IV);
byte[] outData = ict.TransformFinalBlock(b, 0, b.Length);
return Encoding.UTF8.GetString(outData);
}
資料來源:
[1] 對稱式加解密 C#