2010年5月19日 星期三
word不能存檔問題
這兩天電腦的word忽然都不能存檔,即便是另存新檔也不行,最後都只能放棄修改檔案,即便重新安裝過或者更新成2007也都不能存檔,最後就乖乖的google一下,原來是暫存的資料夾不存在,按照以下方式就可以解決了。
資料來源: word 2003不能存檔問題
編輯機碼的(regedit)
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders\Cache改成存在的暫存目錄就好了。
標籤:
MS - Office
2010年4月16日 星期五
Linux Kernel(3.2)- procfs之symlink與mkdir
在procfs底下無法直接使用mkdir/ln等指令建立目錄和建立link,不過有提供兩個API讓user達成這兩件事情。
static struct proc_dir_entry *proc_symlink(const char *src, struct proc_dir_entry *parent,const char *dest); static struct proc_dir_entry *proc_mkdir(const char *name, struct proc_dir_entry *parent);看名字就知道proc_symlink()是用來建立link的,src是檔名(basename),parent是src所在的目錄,dest是要link的對象。
proc_mkdir()就更容易了,要在那個目錄(parent)下建立新的目錄(name)。
下面是範例:
#include <linux/init.h> #include <linux/module.h> #include <linux/proc_fs.h> MODULE_LICENSE("GPL"); static char *bdir = "brook_dir"; module_param(bdir, charp, 0644); MODULE_PARM_DESC(dir, "brook's dir"); static char *bfile = "brook_file"; module_param(bfile, charp, 0644); MODULE_PARM_DESC(bfile, "brook's file"); static struct proc_dir_entry *ent = NULL; static int __init init_modules(void) { if (!(ent = proc_mkdir(bdir, NULL))) { printk("create dir \"%s\" failed\n", bdir); return -1; } if (!proc_symlink(bfile, ent, "../uptime")) { printk("create symlink \"%s\" failed\n", bfile); return -1; } return 0; } static void __exit exit_modules(void) { remove_proc_entry(bfile, ent); if (ent) { remove_proc_entry(bdir, NULL); } } module_init(init_modules); module_exit(exit_modules);
標籤:
Linux - kernel
2010年4月3日 星期六
simple TCP
這是最簡單的tcp的架構,server只有接受(accept)一個client,然後收送資料,接著就結束。
Server
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> // inet_xx() #include <unistd.h> // close() #include <netinet/in.h> #define handle_error(msg) \ do { perror(msg); exit(EXIT_FAILURE); } while (0) int main(int argc, char *argv[]) { int sd, af, asd; // socket descriptor, address family, accepted sd struct sockaddr_in sa, peer; // socket address uint16_t port = 0; char *ip = NULL, buf[128]; socklen_t addrlen; ssize_t len; if (argc > 1) { ip = argv[1]; } af = AF_INET; if ((sd = socket(af, SOCK_STREAM, 0)) < 0) { handle_error("socket"); } memset(&sa, 0, sizeof(sa)); sa.sin_family = af; sa.sin_port = htons(port); sa.sin_addr.s_addr = INADDR_ANY; if (ip) { if (inet_pton(af, ip, &sa.sin_addr) != 1) { handle_error("inet_pton"); } } if (bind(sd, (struct sockaddr*) &sa, sizeof(sa)) < 0) { handle_error("bind"); } addrlen = sizeof(sa); if (getsockname(sd, (struct sockaddr*)&sa, &addrlen) < 0) { handle_error("getsockname"); } printf("bind on %s/%d\n", inet_ntop(sa.sin_family, &sa.sin_addr, buf, sizeof(buf)), ntohs(sa.sin_port)); if (listen(sd, 1) < -1) { // waiting to be accepted handle_error("listen"); } addrlen = sizeof(peer); if ((asd = accept(sd, (struct sockaddr*) &peer, &addrlen)) < 0) { handle_error("accept"); } if ((len = recv(asd, buf, sizeof(buf), 0)) < 0) { handle_error("recv"); } buf[len] = 0; printf("Server recv: %s\n", buf); strcpy(buf, "bye bye, peer!"); if (send(asd, buf, strlen(buf), 0) < 0) { handle_error("send"); } close(asd); close(sd); return 0; }
Client
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> // inet_xx() #include <unistd.h> // close() #include <netinet/in.h> #define handle_error(msg) \ do { perror(msg); exit(EXIT_FAILURE); } while (0) int main(int argc, char *argv[]) { int sd, af = AF_INET; // socket descriptor, address family struct sockaddr_in serv; // socket address char *serv_ip = NULL, buf[128]; socklen_t addrlen; ssize_t len; uint16_t port; if (argc <= 2) { fprintf(stderr, "Usage: %s <serv-ip> <port>\n", argv[0]); exit(EXIT_FAILURE); } serv_ip = argv[1]; port = atoi(argv[2]); if ((sd = socket(af, SOCK_STREAM, 0)) < 0) { handle_error("socket"); } memset(&serv, 0, sizeof(serv)); serv.sin_family = af; serv.sin_port = htons(port); if (inet_pton(af, serv_ip, &serv.sin_addr) != 1) { handle_error("inet_pton"); } if (connect(sd, (struct sockaddr*) &serv, sizeof(serv)) < 0) { handle_error("connect"); } strcpy(buf, "hello server!"); if (send(sd, buf, strlen(buf), 0) < 0) { handle_error("send"); } if ((len = recv(sd, buf, sizeof(buf), 0)) < 0) { handle_error("recv"); } buf[len] = 0; printf("Client recv: %s", buf); close(sd); return 0; }
訂閱:
文章 (Atom)
熱門文章
-
轉自 http://www.wretch.cc/blog/redsonoma/14021073 基本概念: 1> tty(終端設備的統稱): tty一詞源於Teletypes,或者teletypewriters,原來指的是電傳打字機,是通過串行線用打印機鍵盤通過閱...
-
Work queue提供一個interface,讓使用者輕易的建立kernel thread並且將work綁在這個kernel thread上面,如下圖[1]所示。 由於work queue是建立一個kernel thread來執行,所以是在process context...
-
(V)將介紹file operations中的ioctl。ioctl的prototype為: int (*ioctl) (struct inode *inode, struct file *filp, unsigned int cmd, unsigned long arg); ...
-
這兩天電腦的word忽然都不能存檔,即便是另存新檔也不行,最後都只能放棄修改檔案,即便重新安裝過或者更新成2007也都不能存檔,最後就乖乖的google一下,原來是暫存的資料夾不存在,按照以下方式就可以解決了。 資料來源: word 2003不能存檔問題 編輯機碼的(reg...
-
System Call在HW和user space提供一層抽象層,主要目的有: 為user space提供硬體抽象層。比如,讀取檔案時,不用管檔案所在的媒體類型與檔案儲存類型。 System call能確保系統的安全與穩定。避免user space的無意或惡意的破壞。 ...
-
在kernel中建立thread可以使用kthread_create(),建立一個task,然後在調用wake_up_process(task)讓task真正的運行,如果要kill一個kthread可以使用kthread_stop()。 在kernel中,將kthread_cr...
-
Linux module練習手札I紀錄如何撰寫一個簡單的module,並且編輯它,以及load和unload一個module。 write a module #include <linux/init.h> #include <linux/module.h...
-
幾乎任何使用 TCP,UDP或UNIX-domain socket的動作都可以用nc來達成,常見的功能如。 simple TCP proxies shell-script based HTTP clients and servers network daemon testi...
-
很多人心中都有過一個問題 What is the difference between Platform driver and normal device driver? ,簡單的來說Platform devices就non-discoverable,也就是device本身沒辦法...
-
組成元件 要能正確顯示資料,必須包含資料倉儲(Store),資料欄位的定義(ColumnModel)。 首先我們先定義資料欄位: var cm = new Ext.grid.ColumnModel({ {header: 'Name', dataIndex...