Click here to Skip to main content
15,881,588 members
Please Sign up or sign in to vote.
1.00/5 (1 vote)
See more:
Hi:

Which kernel API does Linux cmd [ chattr ] call ?


Thanks!
Posted

The answer:

C++
int flags = 0;
ioctl(fd,FS_IOC_GETFLAGS,&flags);
flags |= FS_COMPR_FL;
flags &= ~FS_NOCOMP_FL;
ioctl(fd,FS_IOC_SETFLAGS,&flags);


Thanks
 
Share this answer
 
Comments
Sergey Alexandrovich Kryukov 1-Jul-13 23:38pm    
How come it could be the answer?...
—SA
Why not try looking for the man page[^] first?
 
Share this answer
 
Comments
Lucky_Girl 25-Jun-13 3:15am    
I have tried .
It does not tell me which kernel Api calls.
Richard MacCutchan 25-Jun-13 3:22am    
Follow the link to the source code.
Lucky_Girl 25-Jun-13 3:57am    
I tried to [strace chattr +c main.cpp].

i can not find which Api i want is.
there are so many APIS
Thanks!
[biz@localhost TEST]$ strace chattr +c main.cpp

execve("/usr/bin/chattr", ["chattr", "+c", "main.cpp"], [/* 40 vars */]) = 0
brk(0) = 0xdac000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f07ee138000
access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=52661, ...}) = 0
mmap(NULL, 52661, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f07ee12b000
close(3) = 0
open("/lib64/libe2p.so.2", O_RDONLY) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\240\35@\3323\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=30552, ...}) = 0
mmap(0x33da400000, 2123888, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x33da400000
mprotect(0x33da406000, 2093056, PROT_NONE) = 0
mmap(0x33da605000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x5000) = 0x33da605000
close(3) = 0
open("/lib64/libcom_err.so.2", O_RDONLY) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\360\23\300\3443\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=17256, ...}) = 0
mmap(0x33e4c00000, 2109872, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x33e4c00000
mprotect(0x33e4c03000, 2093056, PROT_NONE) = 0
mmap(0x33e4e02000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x2000) = 0x33e4e02000
close(3) = 0
open("/lib64/libc.so.6", O_RDONLY) = 3
read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\360\355\201\3313\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=1918016, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f07ee12a000
mmap(0x33d9800000, 3741864, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x33d9800000
mprotect(0x33d9989000, 2093056, PROT_NONE) = 0
mmap(0x33d9b88000, 20480, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x188000) = 0x33d9b88000
mmap(0x33d9b8d000, 18600, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x33d9b8d000
close(3) = 0
open("/lib64/libpthread.so.0", O_RDONLY) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0`\\\300\3313\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=145720, ...}) = 0
mmap(0x33d9c00000, 2212768, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x33d9c00000
mprotect(0x33d9c17000, 2097152, PROT_NONE) = 0
mmap(0x33d9e17000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x17000) = 0x33d9e17000
mmap(0x33d9e19000, 13216, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x33d9e19000
close(3) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f07ee129000
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f07ee127000
arch_prctl(ARCH_SET_FS, 0x7f07ee127720) = 0
mprotect(0x601000, 4096, PROT_READ) = 0
mprotect(0x33da605000, 4096, PROT_READ) = 0
mprotect(0x33e4e02000, 4096, PROT_READ) = 0
mprotect(0x33d9b88000, 16384, PROT_READ) = 0
mprotect(0x33d9e17000, 4096, PROT_READ) = 0
mprotect(0x33d921f000, 4096, PROT_READ) = 0
munmap(0x7f07ee12b000, 52661) = 0
set_tid_address(0x7f07ee1279f0) = 6790
set_robust_list(0x7f07ee127a00, 0x18) = 0
futex(0x7fff425463cc, FUTEX_WAKE_PRIVATE, 1) = 0
futex(0x7fff425463cc, FUTEX_WAIT_BITSET_PRIVATE|FUTEX_CLOCK_REALTIME, 1, NULL, 7f07ee127720) = -1 EAGAIN (Resource temporarily unavailable)
rt_sigaction(SIGRTMIN, {0x33d9c05ae0, [], SA_RESTORER|SA_SIGINFO, 0x33d9c0f500}, NULL, 8) = 0
rt_sigaction(SIGRT_1, {0x33d9c05b70, [], SA_RESTORER|SA_RESTART|SA_SIGINFO, 0x33d9c0f500}, NULL, 8) = 0
rt_sigprocmask(SIG_UNBLOCK, [RTMIN RT_1], NU
Lucky_Girl 25-Jun-13 4:01am    
^ ^
rt_sigprocmask(SIG_UNBLOCK, [RTMIN RT_1], NULL, 8) = 0
getrlimit(RLIMIT_STACK, {rlim_cur=10240*1024, rlim_max=RLIM_INFINITY}) = 0
brk(0) = 0xdac000
brk(0xdcd000) = 0xdcd000
open("/usr/lib/locale/locale-archive", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=99158576, ...}) = 0
mmap(NULL, 99158576, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f07e8296000
close(3) = 0
lstat("main.cpp", {st_mode=S_IFREG|0664, st_size=125, ...}) = 0
lstat("main.cpp", {st_mode=S_IFREG|0664, st_size=125, ...}) = 0
open("main.cpp", O_RDONLY|O_NONBLOCK) = 3
ioctl(3, EXT2_IOC_GETFLAGS, 0x7fff4254623c) = 0
close(3) = 0
lstat("main.cpp", {st_mode=S_IFREG|0664, st_size=125, ...}) = 0
open("main.cpp", O_RDONLY|O_NONBLOCK) = 3
ioctl(3, EXT2_IOC_SETFLAGS, 0x7fff4254623c) = 0
close(3) = 0
exit_group(0) = ?
Richard MacCutchan 25-Jun-13 4:32am    
This looks like the one: ioctl(3, EXT2_IOC_SETFLAGS, 0x7fff4254623c) = 0.
The answer:

C#
int flags = 0;
ioctl(fd,FS_IOC_GETFLAGS,&flags);
flags |= FS_COMPR_FL;
flags &= ~FS_NOCOMP_FL;
ioctl(fd,FS_IOC_SETFLAGS,&flags);

C++



Thanks!
 
Share this answer
 
Comments
Sergey Alexandrovich Kryukov 1-Jul-13 23:39pm    
Not again.

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900