Jun 18, 2012

[Hỏi ngu]: Sự khác nhau giữa Null pointer và void pointer


Tập hợp những câu hỏi mà đôi lúc mình ngộ ra là mình đã hỏi rất ngu =)) .
Null pointer là một giá trị của con trỏ. Con trỏ có nhiều kiểu (int*, char*) và mỗi kiểu đó sẽ qui định giá trị null khác nhau: NULL có thể là 0, cũng có thể là '\0' …
Void pointer là một kiểu - kiểu void* - con trỏ này có thể trỏ đến bất kì kiểu nào.
Vậy nên: Null pointer là một giá trị, còn void pointer là một kiểu con trỏ:
Example:
Void *pa = NULL;
Một tham khảo khác:
Thông thường một null pointer trỏ đến:
  • Địa chỉ 0.
  • Trỏ đến địa chỉ không hợp lệ  cho người dùng truy cập ( như địa chỉ 0x00000000 …), nếu cố truy cập dữ liệu vào địa chỉ này sẽ gây ra lỗi.

Jun 1, 2012

Hướng dẫn compile trên partition của Win trên Linux.

Đang mày mò thằng Ubuntu thì gặp một vấn đề vô cùng khó chịu đó là không thực thi được những file đã compile được trên ổ đĩa Win (Ubuntu mount vô). Sau một hồi tìm hiểu thì mình đã hiểu ra vấn đề: permission của đĩa.
Dùng lệnh sau:
gksu gedit /etc/fstab
File này chứa danh sách tất cả các partition mà người dùng muốn mount, mỗi dòng là một partition (dấu "#" đầu dòng báo hiệu dongf đó là chú thích - comments). Đừng thay đổi, xóa các dòng đã được ghi sẵn trên file.
  1. Tìm thông tin về partitions, bao gồm: địa chỉ partition, UUID, nhãn. Gõ lệnh sau:
    sudo blkid -c /dev/null
    dòng lệnh này sẽ hiện các thông tin về partitions. 
  2. Tạo các thư mục chứa các partition:
    sudo mkdir /media/Data
  3. Chọn tiêu chuẩn tập tin (NTFS): ở đây là "ntfs-3g".
  4. Các tùy chỉnh khác:


    • uid=#### chỉ định userid nào sẽ kiểm soát tập tin trên phân vùng đó. Ví dụ: "uid = 1000" nghĩa là userid = 1000 sẽ kiểm soát các tập tin. Để tìm UID của user dùng lệnh sau: "echo $UID"
    • gid=#### chỉ định ID nhóm (groupid) sẽ kiểm soát các file trên phân vùng đó. Khái niệm tương tự userid. Để tìm các goupid dùng lệnh sau: "cat /etc/group". Thông thường nếu không muốn phiền toái thì UID = GID.
    • umask=UGO [Quan trọng] . Mỗi chữ cái tương ứng với các số từ 0 đến 7 - chỉ định permission (quyền truy cập). Các số này trái ngược với các thông số thông thường. Trong thiết lập thông thường 7 nghĩa là "đọc, viết, thực thi" thì trong fstab có nghĩa là "không có đặc quyền nào". U = quyền cho user, G = quyền cho nhóm, O = quyền cho other. Ví dụ: umask = 000 nghĩa là mọi người đều có quyền truy cập và chỉnh sửa partition.


Cấu trúc trong fstab( trong dấu [] nghĩa là tùy chọn): ["LABEL=Windows" | "UUID=ABCDEFGHIJKLKLMNOP"]  <Địa chỉ partition>  <Địa chỉ thư mục lưu partiotion được mount> ntfs-3g defaults, <uid = ####> , <gid = ####>, <umask = UGO> 0 0 Ví dụ:  /dev/sdb5 /mnt/Music ntfs-3g defaults,uid=1002,gid=1500,umask=227,dmask=022,fmask=133 0 0
    UUID=ABCDEFGHIJKLKLMNOP /media/Windows ntfs-3g defaults,auto,uid=1000,gid=1000,umask=002 0 0 Khởi động lại máy rồi gõ lễnh "sudo mount -a" là có thể excute các file compile. Update: Sử dụng gói ntfs-config
    Click chọn vào phân vùng dùng để compile code. Sau đó tick vào mục Enable Write Support for internal device. Nếu muốn chắc chắn thì tick vào cả 2 mục đều được.