I'm learning to program under android, and I'm having a little problem.
The code of the program I attached to the file can read.
The problem is that it does not correctly display the resolution of the
files through the sperm function.
This is what this program will output:
=======
rwxrwx--x .
rwxr-x--x ..
rwxr-x--x lost+found
rwxr-x--x bugreports
rwxr-x--x .layout_version
rwxr-x--x .tp.settings
rwxr-x--x BT_Addr
rwxr-x--x piggybank
rwxr-x--x server
rwxr-x--x fusemap
rwxrwx--- media
rwxrwx--- lp
rwxrwx--- acdapi
rwxrwx--- tombstones
rwxrwx--- dontpanic
rwxrwx--- data
rwxrwx--- system
rwxrwx--- drm
rwxrwx--- misc
rwxrwx--- app-asec
rwxrwx--- agps_supl
rwxrwx--- nvram
rwxrwx--- amit
rwxrwx--- sec
rwxrwx--- mdl
rwxrwx--- ssh
rwxrwx--- user
rwxrwx--- property
rwxrwx--- app
rwxrwx--- resource-cache
rwxrwx--- local
rwxrwx--- @btmtk
rwxrwx--- anr
rwxrwx--- systest
rwxrwx--- app-lib
rwxrwx--- security
rwxrwx--- nfc_socket
rwxrwx--- backup
rwxrwx--- dalvik-cache
rwxrwx--- app-private
rwxrwx--- x
=======
And now compare this with the output of the original program from
coreutils:
======
drwxrwx--- bluetooth net_bt 2017-06-23 02:01 @btmtk
-rw-rw-r-- nvram nvram 64 2017-06-30 00:40 BT_Addr
drwxrwx--- system system 2017-03-23 13:44 acdapi
drwxrwx--x gps system 2017-06-30 00:40 agps_supl
drwxrwx--- system system 2017-03-23 13:44 amit
drwxrwxr-x system system 2017-06-30 00:40 anr
drwxrwx--x system system 2017-06-30 00:40 app
drwx------ root root 2017-03-23 13:44 app-asec
drwxrwx--x system system 2017-06-29 16:19 app-lib
drwxrwx--x system system 2017-03-23 13:44 app-private
drwx------ system system 2017-06-23 02:01 backup
lrwxrwxrwx root root 2017-06-23 02:01 bugreports ->
/data/data/com.android.shell/files/bugreports
drwxrwx--x system system 2017-06-30 00:16 dalvik-cache
drwxrwx--x system system 2017-06-30 00:16 data
drwxr-x--- root log 2017-03-23 13:44 dontpanic
drwxr-xr-x drm system 2017-06-23 02:01 drm
-rwxr-xr-x root root 13516 2017-06-26 20:13 fusemap
drwxr-x--x root root 2017-06-27 22:07 local
drwxrwx--- root root 1970-01-01 03:00 lost+found
drwxrwxrwx root root 2017-06-23 02:01 lp
drwxrwxr-x shell shell 2017-06-23 02:02 mdl
drwxrwx--- media_rw media_rw 2017-06-26 20:13 media
drwxrwx--t system misc 2017-06-29 22:03 misc
drwxrwx--x nfc radio 2017-03-23 13:44 nfc_socket
drwxrws--- root nvram 2017-06-27 17:18 nvram
-rw------- system system 4194304 2017-06-30 00:41 piggybank
drwx------ root root 2017-06-30 17:31 property
drwxrwx--x system system 2017-03-23 13:44 resource-cache
drwxr-x--- nvram system 2017-06-30 00:40 sec
drwx--x--x system system 2017-03-23 13:44 security
srwxrw---- system system 2017-06-29 22:03 server
drwxr-x--- root shell 2017-06-23 02:01 ssh
drwxrwxr-x system system 2017-06-30 17:13 system
drwx------ system system 2017-06-23 02:01 systest
drwx------ system system 2017-06-26 19:04 tombstones
drwx--x--x system system 2017-06-23 02:02 user
d---rwxrwx root root 2017-06-23 16:59 x
=====
The conclusions are completely different and my program has everything
wrong. Help me!!!
What did you specify as directory? I guess it's not the current
directory, which is the only one that your program will work correctly
with.
You're calling stat on only file names without path. If you had checked
the return value of stat() for errors, you would have noticed that it
will report "file not found" errors as soon as you try to apply you
program to anything but the current directory.
Rolf Magnus wrote:> What did you specify as directory? I guess it's not the current> directory, which is the only one that your program will work correctly> with.> You're calling stat on only file names without path. If you had checked> the return value of stat() for errors, you would have noticed that it> will report "file not found" errors as soon as you try to apply you> program to anything but the current directory.
No, this is all right.
I started the command ./ls system
=====
rwxrwx--x .
rwxr-x--x ..
rwxr-x--x lost+found
rwxr-x--x app
rwxr-x--x appjar
rwxr-x--x bin
rwxr-x--x build.prop
rwxrwx--- data
rwxrwx--- db
rwxrwx--- dolby
rwxrwx--- etc
rwxrwx--- fonts
rwxrwx--- framework
rwxrwx--- lib
rwxrwx--- media
rwxrwx--- mobile_toolkit
rwxrwx--- priv-app
rwxrwx--- res
rwxrwx--- tts
rwxrwx--- usr
rwxrwx--- vendor
rwxrwx--- xbin
======
As you can see everything works great. And here's another example of
starting a command ./ls /system/priv-app /system/app
=======
rwxrwx--x .
rwxr-x--x ..
rwxr-x--x BackupRestoreConfirmation.apk
rwxr-x--x CDS_INFO.apk
rwxr-x--x Calendar.apk
rwxr-x--x CalendarProvider.apk
rwxr-x--x ConfigUpdater.apk
rwxr-x--x Contacts.apk
rwxr-x--x ContactsProvider.apk
rwxr-x--x DefaultContainerService.apk
rwxr-x--x Dialer.apk
rwxr-x--x DownloadProvider.apk
rwxr-x--x ExternalStorageProvider.apk
rwxr-x--x FusedLocation.apk
rwxr-x--x GmsCore.apk
rwxr-x--x GoogleBackupTransport.apk
rwxr-x--x GoogleFeedback.apk
rwxr-x--x GoogleLoginService.apk
rwxr-x--x GoogleOneTimeInitializer.apk
rwxr-x--x GooglePartnerSetup.apk
rwxr-x--x GoogleServicesFramework.apk
rwxr-x--x InputDevices.apk
rwxr-x--x Keyguard.apk
rwxr-x--x NovaLauncher.apk
rwxr-x--x MediaProvider.apk
rwxr-x--x Mms.apk
rwxr-x--x PrivacyProtectionLock.apk
rwxr-x--x ProxyHandler.apk
rwxr-x--x Settings.apk
rwxr-x--x SettingsProvider.apk
rwxr-x--x SetupWizard.apk
rwxr-x--x SharedStorageBackup.apk
rwxr-x--x SystemUI.apk
rwxr-x--x TeleService.apk
rwxr-x--x VpnDialogs.apk
rwxr-x--x WallpaperCropper.apk
rwxrwx--x .
rwxr-x--x ..
rwxr-x--x AppHide.apk
rwxr-x--x ApplicationsProvider.apk
rwxr-x--x BatteryWarning.apk
rwxr-x--x Bluetooth.apk
rwxr-x--x BrowserProviderProxy.apk
rwxr-x--x Superuser.apk
rwxr-x--x CalendarImporter.apk
rwxr-x--x CellConnService.apk
rwxr-x--x CertInstaller.apk
rwxr-x--x CountryList.apk
rwxr-x--x DeskClock.apk
rwxr-x--x DocumentsUI.apk
rwxr-x--x DownloadProviderUi.apk
rwxr-x--x DrmProvider.apk
rwxr-x--x EngineerMode.apk
rwxr-x--x EngineerModeSim.apk
rwxr-x--x FMRadioHQ.apk
rwxr-x--x FWUpgrade.apk
rwxr-x--x FWUpgradeProvider.apk
rwxr-x--x FaceLock.apk
rwxr-x--x FactoryKitTest.apk
rwxr-x--x FactoryServiceHQ.apk
rwxr-x--x FlashLight.apk
rwxr-x--x Gallery2.apk
rwxr-x--x GoogleCalendarSyncAdapter.apk
rwxr-x--x GoogleContactsSyncAdapter.apk
rwxr-x--x GoogleTTS.apk
rwxr-x--x HTMLViewer.apk
rwxr-x--x KeyChain.apk
rwxr-x--x LocationEM.apk
rwxr-x--x MTKAndroidSuiteDaemon.apk
rwxr-x--x MTKLogger.apk
rwxr-x--x MTKThermalManager.apk
rwxr-x--x MtkBt.apk
rwxr-x--x MusicFX.apk
rwxr-x--x Omacp.apk
rwxr-x--x PacProcessor.apk
rwxr-x--x PackageInstaller.apk
rwxr-x--x PartnerBookmarksProvider.apk
rwxr-x--x PermissionControl.apk
rwxr-x--x PhaseBeam.apk
rwxr-x--x RuntimeTest.apk
rwxr-x--x SchedulePowerOnOff.apk
rwxr-x--x Stk1.apk
rwxr-x--x StkSelection.apk
rwxr-x--x SystemUpdate.apk
rwxr-x--x SystemUpdateAssistant.apk
rwxr-x--x TelephonyProvider.apk
rwxr-x--x UserDictionaryProvider.apk
rwxr-x--x VoiceCommand.apk
rwxr-x--x VoiceUnlock.apk
rwxr-x--x YGPS.apk
======
Rights are not shown correctly !!!!
Kirkina A. wrote:> Rolf Magnus wrote:>> What did you specify as directory? I guess it's not the current>> directory, which is the only one that your program will work correctly>> with.>> You're calling stat on only file names without path. If you had checked>> the return value of stat() for errors, you would have noticed that it>> will report "file not found" errors as soon as you try to apply you>> program to anything but the current directory.>> No, this is all right.
It isn't.
> I started the command ./ls /system/> =====> rwxrwx--x .> rwxr-x--x ..> rwxr-x--x lost+found> rwxr-x--x app> rwxr-x--x appjar> rwxr-x--x bin> rwxr-x--x build.prop> rwxrwx--- data> rwxrwx--- db> rwxrwx--- dolby> rwxrwx--- etc> rwxrwx--- fonts> rwxrwx--- framework> rwxrwx--- lib> rwxrwx--- media> rwxrwx--- mobile_toolkit> rwxrwx--- priv-app> rwxrwx--- res> rwxrwx--- tts> rwxrwx--- usr> rwxrwx--- vendor> rwxrwx--- xbin> ======> As you can see everything works great.
It just seems to, but it doesn't.
> Rights are not shown correctly !!!!
The reason is still the same.
Change your line that calls stat into:
int ret = stat(ent->d_name, &statbuf); //получаем информацию
if (ret < 0)
{
perror(ent->d_name);
}
and see what happens.
Also, try
cd /system/priv-app
<mydir>/ls .
replacing <mydir> with the directory where your ls is installed.
Rolf Magnus wrote:> Kirkina A. wrote:> Rolf Magnus wrote:> What did you specify as directory? I guess it's not the current> directory, which is the only one that your program will work correctly> with.> You're calling stat on only file names without path. If you had checked> the return value of stat() for errors, you would have noticed that it> will report "file not found" errors as soon as you try to apply you> program to anything but the current directory.>> No, this is all right.>> It isn't.>> I started the command ./ls system> =====> rwxrwx--x .> rwxr-x--x ..> rwxr-x--x lost+found> rwxr-x--x app> rwxr-x--x appjar> rwxr-x--x bin> rwxr-x--x build.prop> rwxrwx--- data> rwxrwx--- db> rwxrwx--- dolby> rwxrwx--- etc> rwxrwx--- fonts> rwxrwx--- framework> rwxrwx--- lib> rwxrwx--- media> rwxrwx--- mobile_toolkit> rwxrwx--- priv-app> rwxrwx--- res> rwxrwx--- tts> rwxrwx--- usr> rwxrwx--- vendor> rwxrwx--- xbin> ======> As you can see everything works great.>> It just seems to, but it doesn't.>> Rights are not shown correctly !!!!>> The reason is still the same.> Change your line that calls stat into: int ret = stat(ent->d_name,> &statbuf); //получаем информацию> if (ret < 0)> {> perror(ent->d_name);> }>> and see what happens.>> Also, trycd /system/priv-app> <mydir>/ls .>> replacing <mydir> with the directory where your ls is installed.
Yes, I understood the error. I went to /bin and ran the command
/mnt/programs/ls
=======
rwxr-xr-x znew
rwxr-xr-x zfgrep
rwxr-xr-x vdir
rwxr-xr-x lesspipe
rwxr-xr-x cat
rwxr-xr-x zforce
rwxr-xr-x run-parts
rwxr-xr-x zegrep
rwxr-xr-x nc
rwxr-xr-x mktemp
rwxr-xr-x dash
rwxr-xr-x netcat
rwxr-xr-x rm
rwxr-xr-x systemd-escape
rwxr-xr-x tar
rwxr-xr-x sh
rwxr-xr-x ..
rwxr-xr-x hostname
rwxr-xr-x systemd
rwxr-xr-x lessfile
rwxr-xr-x echo
rwxr-xr-x zless
rwxr-xr-x ps
rwxr-xr-x cpio
rwxr-xr-x rmdir
rwxr-xr-x unchroot
rwxr-xr-x pidof
rwxr-xr-x login
rwxr-xr-x kill
rwxr-xr-x domainname
rwxr-xr-x systemd-tty-ask-password-agent
rwxr-xr-x mkdir
rwxr-xr-x dmesg
rwxr-xr-x sed
rwxr-xr-x nc.traditional
rwxr-xr-x dir
rwxr-xr-x egrep
rwxr-xr-x nano
rwxr-xr-x cp
rwxr-xr-x zgrep
rwxr-xr-x sleep
rwxr-xr-x tailf
rwxr-xr-x systemd-machine-id-setup
rwxr-xr-x ss
rwxr-xr-x fgrep
rwxr-xr-x machinectl
rwxr-xr-x rnano
rwxr-xr-x lesskey
rwxr-xr-x false
rwxr-xr-x mount
rwxr-xr-x chacl
rwxr-xr-x netstat
rwxr-xr-x dnsdomainname
rwxr-xr-x dd
rwxr-xr-x uncompress
rwxr-xr-x touch
rwxr-xr-x systemd-ask-password
rwxr-xr-x readlink
rwxr-xr-x chown
rwxr-xr-x which
rwxr-xr-x lessecho
rwxr-xr-x ls
rwxr-xr-x grep
rwxr-xr-x chgrp
rwxr-xr-x kmod
rwxr-xr-x mt
rwxr-xr-x uname
rwxr-xr-x systemd-tmpfiles
rwxr-xr-x pwd
rwxr-xr-x mknod
rwxr-xr-x ln
rwxr-xr-x .
rwxr-xr-x mountpoint
rwxr-xr-x ping
rwxr-xr-x zdiff
rwxr-xr-x mt-gnu
rwxr-xr-x setfacl
rwxr-xr-x lsblk
rwxr-xr-x umount
rwxr-xr-x journalctl
rwxr-xr-x ypdomainname
rwxr-xr-x loginctl
rwxr-xr-x true
rwxr-xr-x gzip
rwxr-xr-x systemctl
rwxr-xr-x chmod
rwxr-xr-x ping6
rwxr-xr-x ip
rwxr-xr-x wdctl
rwxr-xr-x nisdomainname
rwxr-xr-x su
rwxr-xr-x mv
rwxr-xr-x udevadm
rwxr-xr-x stty
rwxr-xr-x gzexe
rwxr-xr-x systemd-inhibit
rwxr-xr-x tempfile
rwxr-xr-x date
rwxr-xr-x lsmod
rwxr-xr-x df
rwxr-xr-x systemd-notify
rwxr-xr-x bash
rwxr-xr-x rbash
rwxr-xr-x gunzip
rwxr-xr-x zcat
rwxr-xr-x zmore
rwxr-xr-x more
rwxr-xr-x findmnt
rwxr-xr-x less
rwxr-xr-x sh.distrib
rwxr-xr-x zcmp
rwxr-xr-x sync
rwxr-xr-x getfacl
=====
But the result of the ls system command ls
=====
total 5504
-rwxr-xr-x. 1 root root 679084 Nov 13 2014 bash
-rwxr-xr-x. 1 root root 30464 Mar 14 2015 cat
-rwxr-xr-x. 1 root root 9728 Sep 8 2014 chacl
-rwxr-xr-x. 1 root root 38644 Mar 14 2015 chgrp
-rwxr-xr-x. 1 root root 34520 Mar 14 2015 chmod
-rwxr-xr-x. 1 root root 38652 Mar 14 2015 chown
-rwxr-xr-x. 1 root root 92216 Mar 14 2015 cp
-rwxr-xr-x. 1 root root 89704 Feb 14 2016 cpio
-rwxr-xr-x. 1 root root 75420 Nov 8 2014 dash
-rwxr-xr-x. 1 root root 42728 Mar 14 2015 date
-rwxr-xr-x. 1 root root 42788 Mar 14 2015 dd
-rwxr-xr-x. 1 root root 59548 Mar 14 2015 df
-rwxr-xr-x. 1 root root 79984 Mar 14 2015 dir
-rwxr-xr-x. 1 root root 38812 Mar 30 2015 dmesg
lrwxrwxrwx. 1 root root 8 Jul 3 00:04 dnsdomainname -> hostname
lrwxrwxrwx. 1 root root 8 Jul 3 00:04 domainname -> hostname
-rwxr-xr-x. 1 root root 22160 Mar 14 2015 echo
-rwxr-xr-x. 1 root root 29 Feb 14 2015 egrep
-rwxr-xr-x. 1 root root 18060 Mar 14 2015 false
-rwxr-xr-x. 1 root root 29 Feb 14 2015 fgrep
-rwxr-xr-x. 1 root root 35472 Mar 30 2015 findmnt
-rwxr-xr-x. 1 root root 18352 Sep 8 2014 getfacl
-rwxr-xr-x. 1 root root 128552 Feb 14 2015 grep
-rwxr-xr-x. 2 root root 2301 Sep 27 2014 gunzip
-rwxr-xr-x. 1 root root 5927 Sep 27 2014 gzexe
-rwxr-xr-x. 1 root root 63992 Sep 27 2014 gzip
-rwxr-xr-x. 1 root root 9768 Nov 3 2013 hostname
-rwxr-xr-x. 1 root root 223048 Sep 5 2014 ip
-rwxr-xr-x. 1 root root 161428 Mar 14 2016 journalctl
-rwxr-xr-x. 1 root root 18028 Mar 7 2015 kill
-rwxr-xr-x. 1 root root 104384 Sep 27 2014 kmod
-rwxr-xr-x. 1 root root 116292 Sep 8 2014 less
-rwxr-xr-x. 1 root root 9588 Sep 8 2014 lessecho
lrwxrwxrwx. 1 root root 8 Jul 3 00:04 lessfile -> lesspipe
-rwxr-xr-x. 1 root root 14352 Sep 8 2014 lesskey
-rwxr-xr-x. 1 root root 7758 Sep 8 2014 lesspipe
-rwxr-xr-x. 1 root root 34548 Mar 14 2015 ln
-rwxr-xr-x. 1 root root 34688 Nov 20 2015 login
-rwxr-xr-x. 1 root root 202476 Mar 14 2016 loginctl
-rwxr-xr-x. 1 root root 79984 Mar 14 2015 ls
-rwxr-xr-x. 1 root root 42936 Mar 30 2015 lsblk
lrwxrwxrwx. 1 root root 4 Jul 3 00:04 lsmod -> kmod
-rwxr-xr-x. 1 root root 186092 Mar 14 2016 machinectl
-rwxr-xr-x. 1 root root 46936 Mar 14 2015 mkdir
-rwxr-xr-x. 1 root root 38712 Mar 14 2015 mknod
-rwxr-xr-x. 1 root root 26328 Mar 14 2015 mktemp
-rwxr-xr-x. 1 root root 30460 Mar 30 2015 more
-rwsr-xr-x. 1 root root 30664 Mar 30 2015 mount
-rwxr-xr-x. 1 root root 5564 Apr 6 2015 mountpoint
lrwxrwxrwx. 1 root root 20 Jul 3 00:04 mt -> /etc/alternatives/mt
-rwxr-xr-x. 1 root root 42992 Feb 14 2016 mt-gnu
-rwxr-xr-x. 1 root root 79900 Mar 14 2015 mv
-rwxr-xr-x. 1 root root 125044 Jul 16 2014 nano
lrwxrwxrwx. 1 root root 20 Jul 3 00:04 nc -> /etc/alternatives/nc
-rwxr-xr-x. 1 root root 18092 Sep 11 2014 nc.traditional
lrwxrwxrwx. 1 root root 24 Jul 3 00:04 netcat ->
/etc/alternatives/netcat
-rwxr-xr-x. 1 root root 84680 Nov 8 2014 netstat
lrwxrwxrwx. 1 root root 8 Jul 3 00:04 nisdomainname -> hostname
lrwxrwxrwx. 1 root root 14 Jul 3 00:04 pidof -> /sbin/killall5
-rwxr-xr-x. 1 root root 34752 Nov 8 2014 ping
-rwxr-xr-x. 1 root root 35056 Nov 8 2014 ping6
-rwxr-xr-x. 1 root root 67492 Mar 7 2015 ps
-rwxr-xr-x. 1 root root 22208 Mar 14 2015 pwd
lrwxrwxrwx. 1 root root 4 Jul 3 00:04 rbash -> bash
-rwxr-xr-x. 1 root root 26284 Mar 14 2015 readlink
-rwxr-xr-x. 1 root root 38640 Mar 14 2015 rm
-rwxr-xr-x. 1 root root 26288 Mar 14 2015 rmdir
lrwxrwxrwx. 1 root root 4 Jul 3 00:04 rnano -> nano
-rwxr-xr-x. 1 root root 14112 Nov 8 2014 run-parts
-rwxr-xr-x. 1 root root 47308 Nov 8 2014 sed
-rwxr-xr-x. 1 root root 22552 Sep 8 2014 setfacl
lrwxrwxrwx. 1 root root 4 Jul 3 00:04 sh -> dash
lrwxrwxrwx. 1 root root 4 Jul 3 00:04 sh.distrib -> dash
-rwxr-xr-x. 1 root root 18076 Mar 14 2015 sleep
-rwxr-xr-x. 1 root root 51800 Sep 5 2014 ss
-rwxr-xr-x. 1 root root 46796 Mar 14 2015 stty
-rwsr-xr-x. 1 root root 26588 Nov 20 2015 su
-rwxr-xr-x. 1 root root 18068 Mar 14 2015 sync
-rwxr-xr-x. 1 root root 366476 Mar 14 2016 systemctl
lrwxrwxrwx. 1 root root 20 Jul 3 00:04 systemd ->
/lib/systemd/systemd
-rwxr-xr-x. 1 root root 30340 Mar 14 2016 systemd-ask-password
-rwxr-xr-x. 1 root root 22140 Mar 14 2016 systemd-escape
-rwxr-xr-x. 1 root root 157416 Mar 14 2016 systemd-inhibit
-rwxr-xr-x. 1 root root 22132 Mar 14 2016 systemd-machine-id-setup
-rwxr-xr-x. 1 root root 22128 Mar 14 2016 systemd-notify
-rwxr-xr-x. 1 root root 59000 Mar 14 2016 systemd-tmpfiles
-rwxr-xr-x. 1 root root 38524 Mar 14 2016
systemd-tty-ask-password-agent
-rwxr-xr-x. 1 root root 13908 Mar 30 2015 tailf
-rwxr-xr-x. 1 root root 224444 Nov 9 2014 tar
-rwxr-xr-x. 1 root root 5580 Nov 8 2014 tempfile
-rwxr-xr-x. 1 root root 38668 Mar 14 2015 touch
-rwxr-xr-x. 1 root root 18060 Mar 14 2015 true
-rwxr-xr-x. 1 root root 202388 Mar 14 2016 udevadm
-rwsr-xr-x. 1 root root 22324 Mar 30 2015 umount
-rwxr-xr-x. 1 root root 18076 Mar 14 2015 uname
-rwxr-xr-x. 1 root root 323 Sep 13 2016 unchroot
-rwxr-xr-x. 2 root root 2301 Sep 27 2014 uncompress
-rwxr-xr-x. 1 root root 79984 Mar 14 2015 vdir
-rwxr-xr-x. 1 root root 22124 Mar 30 2015 wdctl
-rwxr-xr-x. 1 root root 946 Nov 8 2014 which
lrwxrwxrwx. 1 root root 8 Jul 3 00:04 ypdomainname -> hostname
-rwxr-xr-x. 1 root root 1937 Sep 27 2014 zcat
-rwxr-xr-x. 1 root root 1777 Sep 27 2014 zcmp
-rwxr-xr-x. 1 root root 5764 Sep 27 2014 zdiff
-rwxr-xr-x. 1 root root 140 Sep 27 2014 zegrep
-rwxr-xr-x. 1 root root 140 Sep 27 2014 zfgrep
-rwxr-xr-x. 1 root root 2131 Sep 27 2014 zforce
-rwxr-xr-x. 1 root root 5938 Sep 27 2014 zgrep
-rwxr-xr-x. 1 root root 2037 Sep 27 2014 zless
-rwxr-xr-x. 1 root root 1910 Sep 27 2014 zmore
-rwxr-xr-x. 1 root root 5047 Sep 27 2014 znew
=======
Now everything displays rules. I slightly changed the code so that it
would output the files in the current folder if the parameters are not
specified in the command line.
But here's what the program displays if you type ./ls / bin:
========
znew: No such file or directory
zfgrep: No such file or directory
vdir: No such file or directory
lesspipe: No such file or directory
cat: No such file or directory
zforce: No such file or directory
run-parts: No such file or directory
zegrep: No such file or directory
nc: No such file or directory
mktemp: No such file or directory
dash: No such file or directory
netcat: No such file or directory
rm: No such file or directory
systemd-escape: No such file or directory
tar: No such file or directory
sh: No such file or directory
hostname: No such file or directory
systemd: No such file or directory
lessfile: No such file or directory
echo: No such file or directory
zless: No such file or directory
ps: No such file or directory
cpio: No such file or directory
rmdir: No such file or directory
unchroot: No such file or directory
pidof: No such file or directory
login: No such file or directory
kill: No such file or directory
domainname: No such file or directory
systemd-tty-ask-password-agent: No such file or directory
mkdir: No such file or directory
dmesg: No such file or directory
sed: No such file or directory
nc.traditional: No such file or directory
dir: No such file or directory
egrep: No such file or directory
nano: No such file or directory
cp: No such file or directory
zgrep: No such file or directory
sleep: No such file or directory
tailf: No such file or directory
systemd-machine-id-setup: No such file or directory
ss: No such file or directory
fgrep: No such file or directory
machinectl: No such file or directory
rnano: No such file or directory
lesskey: No such file or directory
false: No such file or directory
mount: No such file or directory
chacl: No such file or directory
netstat: No such file or directory
dnsdomainname: No such file or directory
dd: No such file or directory
uncompress: No such file or directory
touch: No such file or directory
systemd-ask-password: No such file or directory
readlink: No such file or directory
chown: No such file or directory
which: No such file or directory
lessecho: No such file or directory
grep: No such file or directory
chgrp: No such file or directory
kmod: No such file or directory
mt: No such file or directory
uname: No such file or directory
systemd-tmpfiles: No such file or directory
pwd: No such file or directory
mknod: No such file or directory
ln: No such file or directory
mountpoint: No such file or directory
ping: No such file or directory
zdiff: No such file or directory
mt-gnu: No such file or directory
setfacl: No such file or directory
lsblk: No such file or directory
umount: No such file or directory
journalctl: No such file or directory
ypdomainname: No such file or directory
loginctl: No such file or directory
true: No such file or directory
gzip: No such file or directory
systemctl: No such file or directory
chmod: No such file or directory
ping6: No such file or directory
ip: No such file or directory
wdctl: No such file or directory
nisdomainname: No such file or directory
su: No such file or directory
mv: No such file or directory
udevadm: No such file or directory
stty: No such file or directory
gzexe: No such file or directory
systemd-inhibit: No such file or directory
tempfile: No such file or directory
date: No such file or directory
lsmod: No such file or directory
df: No such file or directory
systemd-notify: No such file or directory
bash: No such file or directory
rbash: No such file or directory
gunzip: No such file or directory
zcat: No such file or directory
zmore: No such file or directory
more: No such file or directory
findmnt: No such file or directory
less: No such file or directory
sh.distrib: No such file or directory
zcmp: No such file or directory
sync: No such file or directory
getfacl: No such file or directory
--------- znew
--------- zfgrep
--------- vdir
--------- lesspipe
--------- cat
--------- zforce
--------- run-parts
--------- zegrep
--------- nc
--------- mktemp
--------- dash
--------- netcat
--------- rm
--------- systemd-escape
--------- tar
--------- sh
rwxrwx--- ..
rwxrwx--- hostname
rwxrwx--- systemd
rwxrwx--- lessfile
rwxrwx--- echo
rwxrwx--- zless
rwxrwx--- ps
rwxrwx--- cpio
rwxrwx--- rmdir
rwxrwx--- unchroot
rwxrwx--- pidof
rwxrwx--- login
rwxrwx--- kill
rwxrwx--- domainname
rwxrwx--- systemd-tty-ask-password-agent
rwxrwx--- mkdir
rwxrwx--- dmesg
rwxrwx--- sed
rwxrwx--- nc.traditional
rwxrwx--- dir
rwxrwx--- egrep
rwxrwx--- nano
rwxrwx--- cp
rwxrwx--- zgrep
rwxrwx--- sleep
rwxrwx--- tailf
rwxrwx--- systemd-machine-id-setup
rwxrwx--- ss
rwxrwx--- fgrep
rwxrwx--- machinectl
rwxrwx--- rnano
rwxrwx--- lesskey
rwxrwx--- false
rwxrwx--- mount
rwxrwx--- chacl
rwxrwx--- netstat
rwxrwx--- dnsdomainname
rwxrwx--- dd
rwxrwx--- uncompress
rwxrwx--- touch
rwxrwx--- systemd-ask-password
rwxrwx--- readlink
rwxrwx--- chown
rwxrwx--- which
rwxrwx--- lessecho
rwxrwx--- ls
rwxrwx--- grep
rwxrwx--- chgrp
rwxrwx--- kmod
rwxrwx--- mt
rwxrwx--- uname
rwxrwx--- systemd-tmpfiles
rwxrwx--- pwd
rwxrwx--- mknod
rwxrwx--- ln
rwxrwx--- .
rwxrwx--- mountpoint
rwxrwx--- ping
rwxrwx--- zdiff
rwxrwx--- mt-gnu
rwxrwx--- setfacl
rwxrwx--- lsblk
rwxrwx--- umount
rwxrwx--- journalctl
rwxrwx--- ypdomainname
rwxrwx--- loginctl
rwxrwx--- true
rwxrwx--- gzip
rwxrwx--- systemctl
rwxrwx--- chmod
rwxrwx--- ping6
rwxrwx--- ip
rwxrwx--- wdctl
rwxrwx--- nisdomainname
rwxrwx--- su
rwxrwx--- mv
rwxrwx--- udevadm
rwxrwx--- stty
rwxrwx--- gzexe
rwxrwx--- systemd-inhibit
rwxrwx--- tempfile
rwxrwx--- date
rwxrwx--- lsmod
rwxrwx--- df
rwxrwx--- systemd-notify
rwxrwx--- bash
rwxrwx--- rbash
rwxrwx--- gunzip
rwxrwx--- zcat
rwxrwx--- zmore
rwxrwx--- more
rwxrwx--- findmnt
rwxrwx--- less
rwxrwx--- sh.distrib
rwxrwx--- zcmp
rwxrwx--- sync
rwxrwx--- getfacl
=======
My new code:
#include<stdio.h>#include<sys/types.h>#include<sys/stat.h>#include<dirent.h>#include<stdlib.h>#include<string.h>#include<pwd.h>#include<grp.h>#include<time.h>#include<locale.h>#include<langinfo.h>#include<stdint.h>typedefstruct{char*arg;} DATA;//динамический массивstruct stat statbuf;//информация о файлеstruct passwd *pwd;
DATA *the_array =NULL;int num_elements =0;// Keeps track of the number of elements usedint num_allocated =0;// This is essentially how large the array is//==== Функцииint AddToArray (DATA item);charconst * sperm(__mode_t mode);
void printLine();
//========int main(int argc, char *argv[])
{
shortint numFiles=0; //количество файлов/папок в аргументахshortint key_a=0; //ключ -afor(int i=1; i<argc; i++) //Сканируем все аргументы
{
char ch = argv[i][0]; //берем первый символif(ch == '-')
{
int start=1; //начало после '-'while(argv[i][start] != NULL) //проверяем ключи
{
if(argv[i][start] == 'a')
key_a=1;
start++;
}
}
else
{
numFiles++;
DATA temp;
temp.arg = malloc((strlen(argv[i]) + 1) * sizeof(char));
strncpy(temp.arg, argv[i], strlen(argv[i]) + 1); //копируем значение аргумента в переменнуюif(AddToArray(temp) == -1) //если возникли проблемы с памятьюreturn1;
}
}
for(int i=0;i<numFiles;i++) //все каталоги из аргументов
{
printLine();
}
if(numFiles==0) //если не заданы папки в параметрах
{
DIR *dir = opendir(".");
struct dirent *ent;
while((ent = readdir(dir)) != NULL)
{
int ret = stat(ent->d_name, &statbuf);
if (ret < 0)
{
perror(ent->d_name);
}
printf("%10.10s", sperm (statbuf.st_mode));
printf("\t%s\n", ent->d_name);
}
}
return0;
}
void printLine() //печать файла папки с инфой
{
DIR *dir = opendir(the_array->arg);
*the_array++;
if(dir)
{
struct dirent *ent;
while((ent = readdir(dir)) != NULL)
{
int ret = stat(ent->d_name, &statbuf);
if (ret < 0)
{
perror(ent->d_name);
}
printf("%10.10s", sperm (statbuf.st_mode));
printf("\t%s\n", ent->d_name);
}
}
else
{
fprintf(stderr, "Error opening directory\n");
}
}
charconst * sperm(__mode_t mode) {
staticchar local_buff[16] = {0};
int i = 0;
// user permissionsif ((mode & S_IRUSR) == S_IRUSR) local_buff[i] = 'r';
else local_buff[i] = '-';
i++;
if ((mode & S_IWUSR) == S_IWUSR) local_buff[i] = 'w';
else local_buff[i] = '-';
i++;
if ((mode & S_IXUSR) == S_IXUSR) local_buff[i] = 'x';
else local_buff[i] = '-';
i++;
// group permissionsif ((mode & S_IRGRP) == S_IRGRP) local_buff[i] = 'r';
else local_buff[i] = '-';
i++;
if ((mode & S_IWGRP) == S_IWGRP) local_buff[i] = 'w';
else local_buff[i] = '-';
i++;
if ((mode & S_IXGRP) == S_IXGRP) local_buff[i] = 'x';
else local_buff[i] = '-';
i++;
// other permissionsif ((mode & S_IROTH) == S_IROTH) local_buff[i] = 'r';
else local_buff[i] = '-';
i++;
if ((mode & S_IWOTH) == S_IWOTH) local_buff[i] = 'w';
else local_buff[i] = '-';
i++;
if ((mode & S_IXOTH) == S_IXOTH) local_buff[i] = 'x';
else local_buff[i] = '-';
return local_buff;
}
int AddToArray (DATA item) //функция добавления в динамический массив
{
if(num_elements == num_allocated) // Are more refs required?
{
// Feel free to change the initial number of refs// and the rate at which refs are allocated.if (num_allocated == 0)
num_allocated = 3; // Start off with 3 refselse
num_allocated *= 2; // Double the number // of refs allocated// Make the reallocation transactional // by using a temporary variable firstvoid *_tmp = realloc(the_array, (num_allocated * sizeof(DATA)));
// If the reallocation didn't go so well,// inform the user bail outif (!_tmp)
{
fprintf(stderr, "ERROR: Couldn't realloc memory!\n");
return(-1);
}
// Things are looking good so far
the_array = (DATA*)_tmp;
}
the_array[num_elements] = item;
num_elements++;
return num_elements;
}
Alya wrote:> Now everything displays rules. I slightly changed the code so that it> would output the files in the current folder if the parameters are not> specified in the command line.> But here's what the program displays if you type ./ls / bin:> ========> znew: No such file or directory
[...]
Yes. The issue still didn't change. You open /bin in opendir. Then you
get a list of all the files within it - but only file names, without
path!
So you get e.g. "znew". You just give that name to stat, but because
your current working directory is "/mnt/programs", stat will look for a
file "/mnt/programs/znew", which does not exist. That's why you get the
error "No such file or directory".
You would have to specify "/bin/znew" to stat and not just "znew". How
would stat know that it has to search in /bin for this file?
Rolf Magnus wrote:> Alya wrote:> Now everything displays rules. I slightly changed the code so that it> would output the files in the current folder if the parameters are not> specified in the command line.> But here's what the program displays if you type ./ls / bin:> ========> znew: No such file or directory>> [...]>> Yes. The issue still didn't change. You open /bin in opendir. Then you> get a list of all the files within it - but only file names, without> path!> So you get e.g. "znew". You just give that name to stat, but because> your current working directory is "/mnt/programs", stat will look for a> file "/mnt/programs/znew", which does not exist. That's why you get the> error "No such file or directory".> You would have to specify "/bin/znew" to stat and not just "znew". How> would stat know that it has to search in /bin for this file?
All now I have managed to solve a problem here such code:
char txt[128];
snprintf(txt, sizeof txt, "%s/%s", the_array->arg, next->d_name);
int ret = stat(txt, &statbuf);
if (ret < 0)
{
perror(txt);
}